wxPython - RadioButton 类 & RadioBox 类
单选按钮通常代表组中用户可用的众多可选按钮之一。 每个按钮都是 wx.RadioButton 类的一个对象,在圆形按钮旁边带有一个文本标签。
为了创建一组可以相互选择的按钮,第一个wxRadioButton对象的style参数设置为wx.RB_GROUP。 随后的按钮对象被添加到一个组中。
wxPython API 也包含 wx.RadioBox 类。 它的对象为组提供了边框和标签。 组中的按钮可以水平或垂直排列。
wx.RadioButton 的构造函数看起来像 −
Wx.RadioButton(parent, id, label, pos, size, style)
样式参数仅适用于组中的第一个按钮。 它的值为wx.RB_GROUP。 对于组中的后续按钮,可以选择使用 wx.RB_SINGLE 样式参数。
wx.RadioButton 事件绑定器 wx.EVT_RADIOBUTTON 会在每次单击组中的任何按钮时触发关联的处理程序。
wx.RadioButton 类的两个重要方法是 SetValue() - 以编程方式选择或取消选择按钮 - 和 GetValue() - 如果按钮被选中则返回 true,否则返回 false。
wx.RadioBox 将一组相互排斥的按钮放在一个静态框中。 组中的每个按钮都从一个 List 对象中获取其标签,该对象充当 wx.RadioBox 构造函数的"choices"参数。
RadioBox 中的按钮以行方式或列方式布置。 对于构造函数的那个"style"参数应该是 wx.RA_SPECIFY_ROWS 或 wx.RA_SPECIFY_COLS。 行数/列数由"majordimensions"参数的值决定。
wx.RadioBox构造函数的原型是 −
Wx.RadioBox(parent, id, label, pos, size, choices[], initialdimensions, style)
以下是wx.RadioBox类中的重要方法 −
S.N. | 方法与说明 |
---|---|
1 | GetSelection() 返回选中项的索引 |
2 | SetSelection() 以编程方式选择一个项目 |
3 | GetString() 返回选中项的标签 |
4 | SetString() 将标签分配给所选项目 |
5 | Show() 显示或隐藏给定索引的项目 |
与wx.RadioBox 对象关联的事件绑定器是wx.EVT_RADIOBOX。 关联的事件处理程序识别按钮选择并对其进行处理。
示例
以下示例演示了 RadioBox 和 RadioButton 的用法。 首先,三个 RadioButtons,通过指定 wx.RB_GROUP 样式分组放置在面板上。
self.rb1 = wx.RadioButton(pnl,11, label = 'Value A', pos = (10,10), style = wx.RB_GROUP) self.rb2 = wx.RadioButton(pnl,22, label = 'Value B',pos = (10,40)) self.rb3 = wx.RadioButton(pnl,33, label = 'Value C',pos = (10,70))
另一方面,RadioBox 从 lblList[] 对象中读取其按钮的标签。
lblList = ['Value X', 'Value Y', 'Value Z'] self.rbox = wx.RadioBox(pnl,label = 'RadioBox', pos = (80,10), choices = lblList , majorDimension = 1, style = wx.RA_SPECIFY_ROWS)
声明了两个事件绑定器,一个用于无线电组,另一个用于 RadioBox。
self.Bind(wx.EVT_RADIOBUTTON, self.OnRadiogroup) self.rbox.Bind(wx.EVT_RADIOBOX,self.onRadioBox)
相应的事件处理程序识别所选按钮并在控制台窗口上显示消息。
def OnRadiogroup(self, e): rb = e.GetEventObject() print rb.GetLabel(),' is clicked from Radio Group' def onRadioBox(self,e): print self.rbox.GetStringSelection(),' is clicked from Radio Box'
完整代码如下所示 −
import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title = title,size = (300,200)) self.InitUI() def InitUI(self): pnl = wx.Panel(self) self.rb1 = wx.RadioButton(pnl,11, label = 'Value A', pos = (10,10), style = wx.RB_GROUP) self.rb2 = wx.RadioButton(pnl,22, label = 'Value B',pos = (10,40)) self.rb3 = wx.RadioButton(pnl,33, label = 'Value C',pos = (10,70)) self.Bind(wx.EVT_RADIOBUTTON, self.OnRadiogroup) lblList = ['Value X', 'Value Y', 'Value Z'] self.rbox = wx.RadioBox(pnl, label = 'RadioBox', pos = (80,10), choices = lblList, majorDimension = 1, style = wx.RA_SPECIFY_ROWS) self.rbox.Bind(wx.EVT_RADIOBOX,self.onRadioBox) self.Centre() self.Show(True) def OnRadiogroup(self, e): rb = e.GetEventObject() print rb.GetLabel(),' is clicked from Radio Group' def onRadioBox(self,e): print self.rbox.GetStringSelection(),' is clicked from Radio Box' ex = wx.App() Example(None,'RadioButton and RadioBox') ex.MainLoop()
以上代码产生如下输出 −
Value B is clicked from Radio Group
Value C is clicked from Radio Group
Value Y is clicked from Radio Box
Value X is clicked from Radio Box