wxPython - RadioButton & RadioBox 类

  • 简述

    单选按钮通常代表组中用户可用的许多可选按钮之一。每个按钮,一个 wx.RadioButton 类的对象,在圆形按钮旁边带有一个文本标签。
    为了创建一组相互可选择的按钮,第一个 wxRadioButton 对象的样式参数设置为 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 构造函数的“选择”参数。
    RadioBox 中的按钮以行或列方式布局。对于构造函数的“样式”参数应该是 wx.RA_SPECIFY_ROWS 或 wx.RA_SPECIFY_COLS。行数/列数由“majordimensions”参数的值决定。
    wx.RadioBox 构造函数的原型是 -
    
    Wx.RadioBox(parent, id, label, pos, size, choices[], initialdimensions, style)
    
    以下是 wx.RadioBox 类中的重要方法 -
    序列号 方法和描述
    1
    GetSelection()
    返回所选项目的索引
    2
    SetSelection()
    以编程方式选择项目
    3
    GetString()
    返回所选项目的标签
    4
    SetString()
    将标签分配给选定的项目
    5
    Show()
    显示或隐藏给定索引的项目
    与 wx.RadioBox 对象关联的事件绑定器是 wx.EVT_RADIOBOX。关联的事件处理程序识别按钮选择并对其进行处理。
  • 例子

    下面的示例演示了 RadioBox 和 RadioButton 的使用。首先,在面板上放置三个按指定 wx.RB_GROUP 样式分组的 RadioButton。
    
    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()
    
    上面的代码产生以下输出 -
    单选按钮输出
    从 Radio Group 中单击值 B
    从 Radio Group 中单击值 C
    从单选框中单击值 Y
    从单选框中单击值 X