Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PythonGTK:实例化GTK.Bin的子类_Python_Gtk_Pygtk - Fatal编程技术网

PythonGTK:实例化GTK.Bin的子类

PythonGTK:实例化GTK.Bin的子类,python,gtk,pygtk,Python,Gtk,Pygtk,我试图用Python编写一个GTK小部件,它是的一个子类,但不确定如何实例化它。我班的前几行是这样的: class Completer(gtk.Bin): def __init__(self, exts)): gtk.Container.__init__(self) child = gtk.VBox(spacing=15) self.add(child) 我不确定如何设置child属性,因此需要相应的代码。但它挂在gtk.Contai

我试图用Python编写一个GTK小部件,它是的一个子类,但不确定如何实例化它。我班的前几行是这样的:

class Completer(gtk.Bin):

    def __init__(self, exts)):

        gtk.Container.__init__(self)
        child = gtk.VBox(spacing=15)
        self.add(child)
我不确定如何设置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.\uu init\uuu,也会发生这种情况。我不知道如何初始化这个子类,但可能有一种方法,因为GTK确实有可用的GTK.Bin子类。

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

有两种方法可以注册新的gtype:

  • 使用
    gobject.type\u寄存器
  • 在类中设置
    \uu gtype\u name\uu
    类变量
  • 下面是一个使用第二种选择的例子(因为我认为它更为直截了当):


    我这样做了,现在它成功运行了,但是小部件没有显示出来,即使我在顶级应用程序的self.child和call show_all中打包了所有内容。我在尝试从
    GtkBin
    继承时遇到了类似的问题,但是使用
    pygobject
    而不是
    pypgtk
    。这是我当时提出的问题,很可能是
    GtkBin
    的绑定出现了一些问题,可能在
    pygtk
    子分类
    gtk.Frame
    gtk.Viewport
    而不是
    gtk.Bin
    上也解决了小部件不显示的问题。
    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)