Доступ к виджету в GTK + - PullRequest
       6

Доступ к виджету в GTK +

1 голос
/ 15 января 2010

Динамическое построение виджета 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, но безуспешно.

В: скажем, я хочу получить доступ к виджету с именем "name_entry", как мне это сделать?

Ответы [ 2 ]

7 голосов
/ 15 января 2010

Уже вы звоните

self.dialog = builder.get_object("config_dialog")

Вы также должны быть в состоянии сделать

self.nameEntry = builder.get_object("name_entry")

По крайней мере, так работает python-glade, и я предполагаю, что GtkBuilder такой же.

4 голосов
/ 15 января 2010

Кроме того, если вы хотите выполнить поиск именованного виджета, а экземпляр 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...