2010-01-15 90 views
1

从代码动态构建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) 
     self.dialog = builder.get_object("config_dialog") 
     self.dialog._testing=testing 
     self.dialog._builder=builder 

我修补了一下.get_internal_child没有成功。

问:比方说,我想要访问名为“name_entry”的小部件,我将如何去解决它?

回答

7

已经你正在通话

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

你也应该能够做到

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

这至少是蟒蛇,林间空地作品和我如何承担GtkBuilder是一样的。

+0

奇妙!这就是诀窍!我现在不能“投票”你......我今天没有得到任何“投票”......达成了配额。我明天会这样做。 – jldupont 2010-01-15 17:07:24

+0

为什么你把你的答案作为社区Wiki?不能以这种方式获得声望... – jldupont 2010-01-16 14:16:29

+0

@juldupont:可能是因为Ed觉得喜欢它。 – 2010-01-17 18:30:03

4

此外,如果你要搜索一个名为小部件和建造实例不可用,你可以尝试使用下面的效用函数:

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)