wxPython 单选按钮和单选框

wxPython 单选按钮和单选框

单选按钮通常代表用户在一个组中可以选择的多个可选按钮之一。每个按钮,即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 将一组互相排斥的按钮放置在一个静态框中。组中的每个按钮从一个列表对象中取得其标签,该列表对象充当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类中的重要方法:

序号 方法和描述
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)

声明了两个事件绑定器,一个用于单选组(radio group),另一个用于单选框(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()

上面的代码产生以下输出 –

wxPython 单选按钮和单选框

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程