Python GTK : Instantiating a subclass of gtk. Bin

标签 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 子类。

最佳答案

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

注册一个新的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)

关于Python GTK : Instantiating a subclass of gtk. Bin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091889/

相关文章:

python - 如何使用python在sqlite数据库中存储jpg

python - 在 Python 中查找矩阵变为奇异的值

python - subprocess.Popen ("echo $HOME"... 和 subprocess.Popen( ["echo", "$HOME"] 有什么区别

python - Mercurial CGI (hgweb.cgi) 失败

c++ - 需要帮助使用 GTK2 为 wxWidgets (wxGTK) 编写 "backgroundless"小部件

python - 如何使 IconView 中的图标均匀分布?

rust - 如何使 `Button`小于其最小大小?

python - 在 pygtk 应用程序上使用多线程以避免 GUI 卡住

python - 在keras中使用multi_gpu_model时出现valueError

python - 运行过程中进度条不更新