2010-01-15 86 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)