2008-12-24 148 views
1

好的,我將以這個事實作爲前言,我是一個GTK Python新手,但我一直無法挖掘出我需要的信息。基本上我所擁有的是單選按鈕列表,並且根據哪一個按鈕被選中,我需要將按鈕連接到不同的功能。我嘗試創建所有單選按鈕,然後創建一個令人厭惡的if/else塊來檢查每個按鈕上的sget_active()。問題是每一次都會有相同的按鈕返回true。有任何想法嗎?pyGTK單選按鈕幫助

下面是使用代碼:

#Radio Buttons Center 
    self.updatePostRadioVBox = gtk.VBox(False, 0) 
    self.updatePageRadio = gtk.RadioButton(None, "Updating Page") 
    self.updatePostRadio = gtk.RadioButton(self.updatePageRadio, "Updating Blog Post") 
    self.pageRadio = gtk.RadioButton(self.updatePageRadio, "New Page") 
    self.blogRadio = gtk.RadioButton(self.updatePageRadio, "New Blog Post") 
    self.addSpaceRadio = gtk.RadioButton(self.updatePageRadio, "Add New Space") 
    self.removePageRadio = gtk.RadioButton(self.updatePageRadio, "Remove Page") 
    self.removePostRadio = gtk.RadioButton(self.updatePageRadio, "Remove Blog Post") 
    self.removeSpaceRadio = gtk.RadioButton(self.updatePageRadio, "Remove Space") 


    #Now the buttons to direct us from here 
    self.returnMainMenuButton = gtk.Button(" Main Menu ") 
    self.returnMainMenuButton.connect("clicked", self.transToMain) 
    self.contentManageHBoxBottom.pack_start(self.returnMainMenuButton, False, False, 30) 
    self.contentProceedButton = gtk.Button(" Proceed ") 
    self.contentManageHBoxBottom.pack_end(self.contentProceedButton, False, False, 30) 

    if self.updatePageRadio.get_active(): 
     self.contentProceedButton.connect("clicked", self.updatePage) 

    elif self.updatePostRadio.get_active(): 
     self.contentProceedButton.connect("clicked", self.updatePost) 

    elif self.pageRadio.get_active(): 
     self.contentProceedButton.connect("clicked", self.newPage) 

    elif self.blogRadio.get_active(): 
     self.contentProceedButton.connect("clicked", self.newBlogPost) 

    elif self.addSpaceRadio.get_active(): 
     self.contentProceedButton.connect("clicked", self.newSpace) 

    elif self.removePageRadio.get_active(): 
     self.contentProceedButton.connect("clicked", self.removePage) 

    elif self.removePostRadio.get_active(): 
     self.contentProceedButton.connect("clicked", self.removeBlogPost) 

    elif self.removeSpaceRadio.get_active(): 
     self.contentProceedButton.connect("clicked", self.removeSpace) 

回答

7

編輯:(因爲你發佈了一些代碼),只需使用:

active = [r for r in self.updatePageRadio.get_group() if r.get_active()][0] 

,並用它來查找中功能的字典,並稱之爲:

my_actions[active]() 

編輯:我完全忘了提,這不是一個很好的用例在所有的單選按鈕,定期gtk.Button將是更好的我意見。


您的答案是使用RadioButton「groups」系統。這是在this document解釋,但這是一個小實例。

首先,一個組實際上只是一個RadioButton本身,用於收集許多其他RadioButton。您指定一個組作爲構造函數的第一個參數。

r1 = gtk.RadioButton(None, label='Cat') # this has no group, it is the first 
r2 = gtk.RadioButton(r1, label='Mouse') # use the first radio 
             # button as the group argument 
r3 = gtk.RadioButton(r1, label='Dog') # again use r1 

現在所有的單選按鈕將被同步。閱讀它們的事情如下:

active_radios = [r for r in r1.get_group() if r.get_active()] 
+0

你說得對。按鈕是要走的路。感謝您清除我的愚蠢,並在單選按鈕上的課程! – f4nt 2008-12-25 23:31:53

0

首先,我相信這是一個錯字,你實際上是在你的代碼中調用get_active(),而不是set_active()?除此之外,沒有看到代碼,我可以指出你的PyGTK的教程約​​