Skip to main content
 首页 » 编程设计

python之pyGTK 单选按钮

2025年05月04日14zfyouxi

好吧,我将以我是 GTK 和 Python 新手的事实作为开场白,但我无法挖掘我需要的信息。基本上我有一个单选按钮列表,根据选中的单选按钮,我需要将按钮连接到不同的功能。我尝试创建我所有的单选按钮,然后创建一个令人作呕的 if/else block 检查每个按钮上的 sget_active()。问题是同一个按钮每次都返回 true。有什么想法吗?

下面是使用中的代码:

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

请您参考如下方法:

编辑:(因为你发布了一些代码),只需使用:

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

并使用它来查找函数字典并调用它:

my_actions[active]() 

编辑:我完全忘了提及这对于 RadioButtons 来说根本不是一个好的用例,我认为常规的 gtk.Button 会好得多。


您的答案是使用 RadioButton“组”系统。在 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()]