在林间空地3的自定义python小部件

时间:2012-07-19 19:38:09

标签: python glade pygobject

我想将现有的Gtk小部件子类化并使其与Glade3一起使用。代码都是python,我正在使用PyGObject。

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

我读过Glade 2有可能,但我不知道如何使用Glade 3,我似乎无法找到任何关于此的示例或文档。任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:5)

终于找到了怎么做。首先,您必须声明您的glade文件取决于目录

<?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的方法。但你可以做的是在林间空地添加一个常规TextView,保存glade文件并在文本编辑器中打开它。只需查看您创建的树视图并进行如下更改:

-              <object class="TreeView" id="treeview1">
+              <object class="CustomTreeView" id="treeview1">

在林间空地打开它然后显示出来。然后在python中定义一个CustomTreeView类并根据需要进行扩展。