好吧,我的事实,我是一个GTK的的Python的福利局前言本,但我一直没能挖了我所需要的信息。基本上,我有什么是单选按钮的列表,并根据其中的一个被选中,我需要一个按钮连接到不同的功能。我试图创造我所有的单选按钮,然后创建一个令人厌恶的if / else块上的每个按钮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]()

编辑:我完全忘了提,这不是一个很好的用例在所有的单选按钮,定期gtk.Button将在我看来好得多


您的答案是使用单选按钮“组”系统。它在这个文件,但这里是一个小的实际例子。

首先的基团实际上是一个单选按钮本身是,用于收集多个其他的单选按钮。指定组作为第一个参数,以构造。

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()]

其他提示

首先,我相信这是一个错字和你实际调用get_active()在你的代码,而不是set_active()?除此之外,没有看到代码,我可以指出你了解单选按钮

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top