2

我正在尝试在 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 的可用子类。

4

1 回答 1

1

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

有两种注册新 gtype 的方法:

  1. 使用gobject.type_register.
  2. 在你的类中设置__gtype_name__类变量。

这是使用第二个选择的示例(因为我认为更直接):

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)
于 2013-02-26T15:16:59.940 回答