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

1

Динамическое построение виджета 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", как бы я это сделал?

Теги:
gtk

2 ответа

7
Лучший ответ

Вы уже звоните

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

Вы также должны иметь возможность делать

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

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

  • 0
    Замечательное! Это сделало трюк! Я не могу "проголосовать" за вас в данный момент ... У меня не осталось "голосов" на сегодня ... квота достигнута. Я сделаю это завтра.
  • 0
    Почему вы поместили свой ответ в вики сообщества? Не могу заработать репутацию таким образом ...
Показать ещё 2 комментария
4

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню