pyGTK单选按钮

f4n*_*4nt 1 python gtk pygtk

好吧,我将在前言中提到我是GTK Python新手,但我无法挖掘出我需要的信息.基本上我所拥有的是单选按钮列表,基于哪一个被检查,我需要将按钮连接到不同的功能.我尝试创建所有单选按钮,然后sget_active()在每个按钮上创建一个恶心的if/else块检查.问题是同一个按钮每次都返回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)
Run Code Online (Sandbox Code Playgroud)

Ali*_*har 7

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

active = [r for r in self.updatePageRadio.get_group() if r.get_active()][0]
Run Code Online (Sandbox Code Playgroud)

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

my_actions[active]()
Run Code Online (Sandbox Code Playgroud)

编辑:我完全忘了提到这对于RadioButtons来说根本不是一个好的用例,普通gtk.Button在我看来会好得多.


你的答案是使用RadioButton"组"系统.本文档对此进行了解释,但这是一个很小的实际例子.

首先,一个组实际上只是一个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
Run Code Online (Sandbox Code Playgroud)

现在所有单选按钮都将同步.阅读它们的问题就像:

active_radios = [r for r in r1.get_group() if r.get_active()]
Run Code Online (Sandbox Code Playgroud)