好吧,我将在前面提到我是一个GTK 和 Python newb,但我无法挖掘出我需要的信息。基本上我所拥有的是单选按钮列表,基于哪一个被检查,我需要将按钮连接到不同的功能。我尝试创建所有单选按钮,然后在每个按钮上创建一个令人作呕的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)
答案 0 :(得分:7)
编辑:(因为你发布了一些代码),只需使用:
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()]
答案 1 :(得分:0)
首先,我认为这是一个拼写错误,你实际上是在代码中调用get_active()而不是set_active()?除此之外,在没有看到代码的情况下,我可以向您指出关于radio buttons
的pygtk教程