当前位置: 首页 > 文档资料 > wxPython 中文教程 >

单选按钮和收音机盒(RadioButton & RadioBox)

优质
小牛编辑
134浏览
2023-12-01

单选按钮通常表示组中用户可用的许多可选按钮之一。 每个按钮,wx.RadioButton类的对象在圆形按钮旁边都有一个文本标签。

为了创建一组可相互选择的按钮,第一个wxRadioButton对象的style参数设置为wx.RB_GROUP。 后续按钮对象将添加到组中。

wxPython API也包含wx.RadioBox类。 它的对象为组提供边框和标签。 组中的按钮可以水平或垂直排列。

wx.RadioButton构造函数看起来像 -

Wx.RadioButton(parent, id, label, pos, size, style)

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类中的重要方法 -

SN方法和描述
1

GetSelection()

返回所选项的索引

2

SetSelection()

以编程方式选择项目

3

GetString()

返回所选项的标签

4

SetString()

将标签分配给所选项目

5

Show()

显示或隐藏给定索引的项目

与wx.RadioBox对象关联的事件绑定器是wx.EVT_RADIOBOX。 关联事件处理程序标识按钮选择并对其进行处理。

例子 (Example)

以下示例演示了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.

从Radio Box点击值Y.

从Radio Box点击值X.