где `parent` в gtk3? - PullRequest
       6

где `parent` в gtk3?

0 голосов
/ 19 мая 2018

Извините, что задаю такой простой вопрос, я перехожу из PyGTK в PyGI, и в моей программе есть несколько меток, которые сделаны чувствительными к щелчку мыши, добавляя их в EventBox;структура определяется в файлах glade, а обратные вызовы задаются в коде Python.

В PyGTK мы полагаемся на возможность найти EventBox, прочитав свойство parent Label.

Теперь у меня есть этот простой код 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, поэтому мне нужно общее решение.

Рабочая ссылка на pygi-convert.sh предоставит материал для изучения.


Если вам интересно, целевым программным обеспечением является менеджер ботанических баз данных .

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Вы должны использовать метод получения из Gtk.Widget get_parent () .

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)>
0 голосов
/ 19 мая 2018

Вы ищете метод get_parent():

print(self.label.get_parent())
...