wxPython RadioButton & RadioBox类

单选按钮通常表现为一组用户从多种可选按钮里选择一个选项。每个按钮,wx.RadioButton类的一个对象会在旁边带着一个圆形按钮文本标签。

为了创建一组相互可选择的按钮,首先wxRadioButton对象的样式参数设置为wx.RB_GROUP。后继按钮对象会被添加到一组。

wxPython的API还包括wx.RadioBox类。它的对象提供了一个边框和标签组。组中的按钮可以水平或垂直布置。

wx.RadioButton构造看起来像 -
Wx.RadioButton(parent, id, label, pos, size, style) 

style参数仅用于该组中的第一个按钮。它的值是wx.RB_GROUP。对于组中的随后的按钮,wx.RB_SINGLE的style 参数可以任选地使用。

每任何组中的按钮被点击时 wx.RadioButton 事件绑定器 wx.EVT_RADIOBUTTON 触发相关的处理程序。

wx.RadioButton类的两种重要的方法是 SetValue() – 选择或取消选择按钮编程,和getValue()  如果选择一个按钮则返回 true,否则返回 false。

wx.RadioBox 则以相互排斥的按钮集合在一个静态框。该组中的每个按钮将其标签从列表对象作为'选择'wx.RadioBox构造函数的参数。

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以及单选按钮。首先,三个单选按钮通过指定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' 

RadioBoxAndRadioButton.py 完整的代码如下:

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 & RadioBox - www.xuhuhu.com') 
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


以下是纠正/补充内容:

在使用 wx.RadioBox 时,style=wx.RA_SPECIFY_ROWS,应该是竖排显示的。  提交时间:2019-09-09
上一篇: wxPython TextCtrl类 下一篇: wxPython CheckBox类