Python 访问GTK+中的小部件;

Python 访问GTK+中的小部件;,python,gtk,Python,Gtk,从代码动态构建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)

从代码动态构建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
我已经对
做了一些修补。没有成功地获得\u internal\u child


问:假设我想访问名为“name\u entry”的小部件,我该怎么做?

您已经在打电话了

self.dialog = builder.get_object("config_dialog")
你也应该能够做到

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

至少python glade是这样工作的,我认为GtkBuilder也是一样的。

您已经在打电话了

self.dialog = builder.get_object("config_dialog")
你也应该能够做到

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

这至少是python glade的工作方式,我假设GtkBuilder是相同的。

此外,如果要搜索命名小部件而生成器实例不可用,可以尝试使用以下实用程序函数:

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)

此外,如果要搜索命名小部件,而生成器实例不可用,可以尝试使用以下实用程序功能:

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)

了不起的成功了!我现在不能“投票”给你。。。今天我没有任何“选票”了。。。已达到配额。我明天再做。你为什么把你的答案放在社区维基上?杜邦:也许是因为爱德喜欢这样。1。我没有意识到没有增加声誉,我也不知道我应该多关心声誉。2.如果人们觉得我的答案不够,我宁愿他们改进我的答案,而不是发布一个一次性的答案并分散选票。太棒了!成功了!我现在不能“投票”给你。。。今天我没有任何“选票”了。。。已达到配额。我明天再做。你为什么把你的答案放在社区维基上?杜邦:也许是因为爱德喜欢这样。1。我没有意识到没有增加声誉,我也不知道我应该多关心声誉。2.如果人们觉得我的答案不够,我宁愿他们改进我的答案,而不是发布一个一次性的答案,并分散选票。