為了創(chuàng)建一組相互可選擇的按鈕,首先wxRadioButton對象的樣式參數(shù)設(shè)置為wx.RB_GROUP。后繼按鈕對象會被添加到一組。
wxPython的API還包括wx.RadioBox類。它的對象提供了一個(gè)邊框和標(biāo)簽組。組中的按鈕可以水平或垂直布置。
Wx.RadioButton(parent, id, label, pos, size, style)
style參數(shù)僅用于該組中的第一個(gè)按鈕。它的值是wx.RB_GROUP。對于組中的隨后的按鈕,wx.RB_SINGLE的style 參數(shù)可以任選地使用。
wx.RadioButton類的兩種重要的方法是 SetValue() – 選擇或取消選擇按鈕編程,和getValue() 如果選擇一個(gè)按鈕則返回 true,否則返回 false。
wx.RadioBox 則以相互排斥的按鈕集合在一個(gè)靜態(tài)框。該組中的每個(gè)按鈕將其標(biāo)簽從列表對象作為'選擇'wx.RadioBox構(gòu)造函數(shù)的參數(shù)。
RadioBox按鈕將在按行或列的方式逐步布局。對于構(gòu)造的'style'參數(shù)的值應(yīng)該是wx.RA_SPECIFY_ROWS或wx.RA_SPECIFY_COLS。行/列的數(shù)目是由'majordimensions'參數(shù)的值來決定。
Wx.RadioBox(parent, id, label, pos, size, choices[], initialdimensions, style)
| S.N. | 方法 & 描述 |
|---|---|
| 1 |
GetSelection()
返回所選項(xiàng)目的索引
|
| 2 |
SetSelection()
選擇編程項(xiàng)目
|
| 3 |
GetString()
返回選定項(xiàng)的標(biāo)簽
|
| 4 |
SetString()
分配標(biāo)簽到所選擇的項(xiàng)目
|
| 5 |
Show()
顯示或隱藏指定索引的項(xiàng)目
|
與wx.RadioBox對象關(guān)聯(lián)的事件綁定是wx.EVT_RADIOBOX。關(guān)聯(lián)的事件處理程序識別按鈕的選擇并處理它。
下面的例子演示了如何使用RadioBox以及單選按鈕。首先,三個(gè)單選按鈕通過指定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))
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.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.yiibai.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