有没有办法取消选中组中的所有单选按钮? (PyGTK的)

时间:2009-11-21 01:13:45

标签: gtk pygtk

有没有办法用PyGTK取消选中组中的所有单选按钮?启动时没有检查单选按钮,所以我认为必须有一种方法可以将它们全部恢复到未检查的状态。

4 个答案:

答案 0 :(得分:6)

我同意迈克尔,但是为了记录,这可以做到。

执行此操作的一种方法是使用可以激活的隐藏单选按钮,这将导致所有可见的按钮处于非活动状态。快速肮脏的例子:

import gtk

window = gtk.Window()
window.set_default_size(200, 200)

rb1 = gtk.RadioButton()
rb2 = gtk.RadioButton()
rb3 = gtk.RadioButton()

rb2.set_group(rb1)
rb3.set_group(rb2)

rb3.set_active(True)

hbox = gtk.HBox()

hbox.add(rb1)
hbox.add(rb2)
hbox.add(rb3)

button = gtk.Button("Click me")
button.connect("clicked", lambda x: rb3.set_active(True))

hbox.add(button)

window.add(hbox)
window.show_all()

rb3.hide()

gtk.main()

答案 1 :(得分:2)

不应该。就其本质而言,单选按钮组是“选择众多”控件之一。从人的角度来看,这个想法是总是选择其中一个。框架确实应该强制执行,因此该组实际上不应该是“未选择”状态。单选按钮组的非选择状态(在可能的框架中)对用户来说非常混乱,因为这不是他们可以控制的状态。

如果你想要一个'none selected'状态,我会说你应该在组中添加一个'none'元素,或者选择一个符合你想要用它的控制类型。

答案 2 :(得分:1)

在源代码中查找,如果新状态与旧状态不同,set_active只是模拟按钮上的单击。单选按钮代码然后检查组中是否有另一个单选按钮处于活动状态,如果没有,则拒绝按照您的注意事项进行更改。

从外观看,第一个单选按钮应始终在创建组时设置为活动状态(按预期方式)。如果它没有显示它可能是一个错误,那么有兴趣看看你创建的第一个按钮radio_button.get_active是否为True(即使它没有显示在UI中)。

我同意Michael Kohne的观点,但如果您想要取消选择所有单选按钮,您应该查看另一个UI元素。

答案 3 :(得分:1)

我的解决方案,特别是不鼓励,是在同一组中有一个单选按钮,不会在屏幕上显示。

在Glade中,您可以添加小部件作为顶级'在窗口小部件的上下文菜单中添加按钮。在代码中我会想象它基本上只是不将小部件添加到任何显示的gui,或者小心地不要显示它(包括父母的.showall())