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

Dan*_*Dan 4 python glade pygobject

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

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

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

Dan*_*Dan 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...
Run Code Online (Sandbox Code Playgroud)

接下来,创建一个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>
Run Code Online (Sandbox Code Playgroud)

就是这样.显然,还没有编写python代码,但这不会阻止Glade显示您的自定义小部件.它只会将其视为普通的TextView,Label或其他您想要扩展的内容.

哦,我无法在Glade本身找到一种方法来创建一个CustomTextView.但你可以做的是在林间空地添加一个常规TextView,保存glade文件并在文本编辑器中打开它.只需查看您创建的树视图并进行如下更改:

-              <object class="TreeView" id="treeview1">
+              <object class="CustomTreeView" id="treeview1">
Run Code Online (Sandbox Code Playgroud)

在林间空地打开它,它出现了.然后在python中定义一个CustomTreeView类并根据需要进行扩展.