gtk3 中的 `parent` 在哪里?

where is `parent` in gtk3?

很抱歉提出这样一个简单的问题,我正在从 PyGTK 转移到 PyGI,我的程序有几个对鼠标点击敏感的标签,方法是将它们添加到 EventBox;结构在 glade 文件中定义,回调在 Python 代码中设置。

在 PyGTK 中,我们依赖于能够通过读取 Label.

parent 属性 来找到 EventBox

现在我有了这个简单的 Python 代码:

if True:
    import gi
    gi.require_version('Gtk', '3.0')
    from gi.repository import Gtk
else:
    import gtk as Gtk

class MyWindow(Gtk.Window):

    def __init__(self):
        super(MyWindow, self).__init__()

        self.eventbox = Gtk.EventBox()
        self.add(self.eventbox)
        self.label = Gtk.Label("click me")
        self.eventbox.add(self.label)
        print self.label.parent

win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

什么都不做,为 PyGtk 运行,但向 PyGI 抱怨,说 'Label' object has no attribute 'parent'

这不是我的代码使用 parent 字段的唯一地方,所以我需要一个通用的解决方案。

工作 link 到 pygi-convert.sh 将为学习提供 material。


如果您想知道,目标软件是 botanic database manager

您正在寻找 get_parent() 方法:

print(self.label.get_parent())

您必须使用 Gtk.Widget get_parent() 中的 getter 方法。

if True:
    import gi
    gi.require_version('Gtk', '3.0')
    from gi.repository import Gtk
else:
    import gtk as Gtk

class MyWindow(Gtk.Window):

    def __init__(self):
        super(MyWindow, self).__init__()

        self.eventbox = Gtk.EventBox()
        self.add(self.eventbox)
        self.label = Gtk.Label("click me")
        self.eventbox.add(self.label)
        print self.label.get_parent()

win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

执行后:

<Gtk.EventBox object at 0x7f802a597910 (GtkEventBox at 0x55a88239a130)>