Python GTK:实例化gtk.Bin的子类

时间:2013-02-26 14:41:46

标签: python gtk pygtk

我正在尝试在Python中编写一个GTK小部件,它是gtk.Bin的子类,我不确定如何实例化它。我班上的前几行看起来像:

class Completer(gtk.Bin):

    def __init__(self, exts)):

        gtk.Container.__init__(self)
        child = gtk.VBox(spacing=15)
        self.add(child)

我不确定如何设置子属性,因此代码就是这样。但它挂起了gtk.Container .__ init __(self)这一行的消息:

  File "C:\Users\462974\Documents\Local Sandbox\tools\python\packages\GUI\tools\SNCompleter.py", line 133, in __init__
    gtk.Container.__init__(self)
TypeError: cannot create instance of abstract (non-instantiable) type `GtkBin'

如果我调用gtk.Bin .__ init__也会发生这种情况。我不确定如何初始化这个子类,但可能有一种方法,因为GTK确实有可用的gtk.Bin子类。

1 个答案:

答案 0 :(得分:1)

你需要为你的小部件注册一个新的gtype,否则它将使用与超类相同的,并且因为它是一个抽象类,你将无法实例化它(如异常所示)。

注册新gtype的方法有两种:

  1. 使用gobject.type_register
  2. 在班级中设置__gtype_name__类变量。
  3. 这是使用第二种选择的一个例子(因为我认为更加向前):

    class Completer(gtk.Bin):
        __gtype_name__= "Completer"
    
        def __init__(self, exts, *args, **kwargs):
            super(Completer, self).__init__(*args, **kwargs)
            child = gtk.VBox(spacing=15)
            self.add(child)