我想继承一个现有的 Gtk 小部件并让它与 Glade3 一起工作。代码都是python,我用的是PyGObject。
我想要做的是扩展 Gtk.TextView 并能够将它添加到我的 glade UI 中,就好像它是一个原生小部件一样。
我读到 Glade 2 是可能的,但我不确定如何用 Glade 3 做到这一点,而且我似乎找不到任何示例或文档。任何帮助,将不胜感激。谢谢。
终于知道怎么做了。首先,你必须声明你的 glade 文件依赖于一个catalog。
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<!-- interface-requires the_catalog_name 1.0 -->
...Rest of the glade file...
接下来,创建一个 catalog.xml 文件。要扩展树视图,它应该如下所示:
<glade-catalog name="the_catalog_name" domain="glade-3"
depends="gtk+" version="1.0">
<glade-widget-classes>
<glade-widget-class title="My Custom Text View" name="CustomTextView"
generic-name="CustomTextView" parent="GtkTextView"
icon-name="widget-gtk-textview"/>
</glade-widget-classes>
</glade-catalog>
就是这样。显然目前还没有编写 Python 代码,但这不会阻止 Glade 显示您的自定义小部件。它只会将其视为普通的 TextView、Label 或您想要扩展的任何其他内容。
哦,不幸的是,我在 Glade 本身中找不到创建 CustomTextView 的方法。但是你可以做的是在 glade 中添加一个常规的 TextView,保存 glade 文件并在文本编辑器中打开它。只需查找您创建的树视图并进行如下更改:
- <object class="TreeView" id="treeview1">
+ <object class="CustomTreeView" id="treeview1">
在空地里打开它,它就会出现。然后只需在 python 中定义一个 CustomTreeView 类并根据需要进行扩展。