Динамическое построение виджета GTK + из кода позволяет легко получить доступ к дочерним виджетам.
Теперь, как мне получить доступ к дочерним виджетам при построении диалога GTK + (в качестве примера) из файла .glade
?
class ConfigDialog(object):
def __init__(self, glade_file, testing=False):
self.testing=testing
builder = gtk.Builder()
builder.add_from_file(glade_file)
self.dialog = builder.get_object("config_dialog")
self.dialog._testing=testing
self.dialog._builder=builder
Я немного поработал с .get_internal_child
.
Q: скажем, я хочу получить доступ к виджету с именем "name_entry", как бы я это сделал?
Вы уже звоните
self.dialog = builder.get_object("config_dialog")
Вы также должны иметь возможность делать
self.nameEntry = builder.get_object("name_entry")
Это, по крайней мере, то, как работает python-glade, и я предполагаю, что GtkBuilder - это то же самое.
Кроме того, если вы хотите найти именованный виджет, а экземпляр Builder недоступен, вы можете попробовать использовать следующую служебную функцию:
def get_child_by_name(parent, name):
"""
Iterate through a gtk container, `parent`,
and return the widget with the name `name`.
"""
def iterate_children(widget, name):
if widget.get_name() == name:
return widget
try:
for w in widget.get_children():
result = iterate_children(w, name)
if result is not None:
return result
else:
continue
except AttributeError:
pass
return iterate_children(parent, name)