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.yiibai.com') 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