
- wxPython 教程
- wxPython - 首頁
- wxPython - 簡介
- wxPython - 環境配置
- wxPython - Hello World
- wxPython - GUI 構建工具
- wxPython - 主要類
- wxPython - 事件處理
- wxPython - 佈局管理
- wxPython - 按鈕
- wxPython - 可停靠視窗
- 多文件介面
- wxPython - 繪圖 API
- wxPython - 拖放操作
- wxPython 資源
- wxPython - 快速指南
- wxPython - 有用資源
- wxPython - 討論
wxPython - 單選按鈕 & 單選框
單選按鈕通常表示使用者在一個組中可以選擇的多選按鈕之一。每個按鈕都是一個 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 style 引數。
wx.RadioButton 事件繫結器 wx.EVT_RADIOBUTTON 在每次單擊組中的任何按鈕時都會觸發關聯的處理程式。
wx.RadioButton 類的兩個重要方法是 SetValue() - 以程式設計方式選擇或取消選擇按鈕 - 和 GetValue() - 如果按鈕被選中則返回 true,否則返回 false。
wx.RadioBox 將一系列互斥按鈕放置在靜態框中。組中的每個按鈕都從充當 wx.RadioBox 建構函式“choices”引數的 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 類中的重要方法:
序號 | 方法 & 描述 |
---|---|
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