wxPython – RadioButton & RadioBox
一个Radio按钮通常代表了一个组中可供用户选择的许多按钮之一。每个按钮,一个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()–如果一个按钮被选中则返回真,否则返回假。
一个 wx.RadioBox 在一个静态框中放置了一组互斥的按钮。该组中的每个按钮都从作为wx.RadioBox构造函数 “选择 “参数的List对象中获取其标签。
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()
上述代码产生了以下输出 —
值B被从无线电组中点击
价值C从单选组中被点击
Y值从单选框中点击
值X从单选框中被点击