在GTK+中访问组件

1 投票
2 回答
1415 浏览
提问于 2025-04-15 18:04

从代码动态创建一个GTK+小部件,可以方便地直接访问它里面的子小部件。

那么,当我从一个.glade文件构建一个GTK+对话框(比如说)时,怎么才能访问到里面的子小部件呢?

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 个回答

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)
7

你已经在进行这个调用了。

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

你也应该可以这样做。

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

这至少是python-glade的工作方式,我猜GtkBuilder也是这样。

撰写回答