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

❮ wxPython 主要类