4

我想继承一个现有的 Gtk 小部件并让它与 Glade3 一起工作。代码都是python,我用的是PyGObject。

我想要做的是扩展 Gtk.TextView 并能够将它添加到我的 glade UI 中,就好像它是一个原生小部件一样。

我读到 Glade 2 是可能的,但我不确定如何用 Glade 3 做到这一点,而且我似乎找不到任何示例或文档。任何帮助,将不胜感激。谢谢。

4

1 回答 1

5

终于知道怎么做了。首先,你必须声明你的 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 类并根据需要进行扩展。

于 2012-09-03T03:11:09.007 回答