- wxPython 教程
- wxPython - 首頁
- wxPython - 簡介
- wxPython - 環境配置
- wxPython - Hello World
- wxPython - GUI 構建工具
- wxPython - 主要類
- wxPython - 事件處理
- wxPython - 佈局管理
- wxPython - 按鈕
- wxPython - 可停靠視窗
- 多文件介面
- wxPython - 繪圖 API
- wxPython - 拖放
- wxPython 資源
- wxPython - 快速指南
- wxPython - 有用資源
- wxPython - 討論
wxPython - ComboBox & Choice 類
一個wx.ComboBox物件提供了一個專案列表供選擇。它可以配置為下拉列表或永久顯示。
從列表中選擇的專案顯示在文字欄位中,預設情況下該欄位是可編輯的,但在存在wx.CB_READONLY樣式引數的情況下,可以將其設定為只讀。
wxPython API 包含一個wx.Choice 類,其物件也是一個下拉列表,並且永久只讀。
wx.ComboBox 類建構函式使用的引數如下:
Wx.ComboBox(parent, id, value, pos, size, choices[], style)
value 引數是要在組合框文字框中顯示的文字。它從 choices[] 集合中的專案填充。
wx.ComboBox 定義了以下樣式引數:
| 序號 | 引數 & 說明 |
|---|---|
| 1 | wx.CB_SIMPLE 帶有永久顯示列表的組合框 |
| 2 | wx.CB_DROPDOWN 帶有下拉列表的組合框 |
| 3 | wx.CB_READONLY 選擇的專案不可編輯 |
| 4 | wx.CB_SORT 列表按字母順序顯示 |
下表顯示了 wx.ComboBox 類的常用方法:
| 序號 | 方法 & 說明 |
|---|---|
| 1 | GetCurrentSelection () 返回被選擇的專案 |
| 2 | SetSelection() 將給定索引處的專案設定為選中狀態 |
| 3 | GetString() 返回與給定索引處的專案關聯的字串 |
| 4 | SetString() 更改給定索引處專案的文字 |
| 5 | SetValue() 將字串設定為組合框編輯欄位中顯示的文字 |
| 6 | GetValue() 返回組合框文字欄位的內容 |
| 7 | FindString() 在列表中搜索給定的字串 |
| 8 | GetStringSelection() 獲取當前選中專案的文字 |
此類生成的事件的事件繫結器如下:
| 序號 | 事件 & 說明 |
|---|---|
| 1 | wx.COMBOBOX 從列表中選擇專案時 |
| 2 | wx.EVT_TEXT 組合框文字更改時 |
| 3 | wx.EVT_COMBOBOX_DROPDOWN 列表下拉時 |
| 4 | wx.EVT_COMBOBOX_CLOSEUP 列表收起時 |
wx.Choice 類建構函式原型如下:
wx.Choice(parent, id, pos, size, n, choices[], style)
引數“n”表示用於初始化選擇列表的字串數量。與 comboBox 一樣,列表使用 choices[] 集合中的專案填充。
對於 Choice 類,只定義了一個樣式引數,即 wx.CB_SORT。只有一個事件繫結器處理此類發出的事件,即 wx.EVT_CHOICE。
示例
此示例顯示了 wx.ComboBox 和 wx.Choice 的功能。兩個物件都放在一個垂直框大小調整器中。列表使用 languages[] 列表物件中的專案填充。
languages = ['C', 'C++', 'Python', 'Java', 'Perl'] self.combo = wx.ComboBox(panel,choices = languages) self.choice = wx.Choice(panel,choices = languages)
事件繫結器 EVT_COMBOBOX 和 EVT_CHOICE 處理它們上的相應事件。
self.combo.Bind(wx.EVT_COMBOBOX, self.OnCombo) self.choice.Bind(wx.EVT_CHOICE, self.OnChoice)
以下處理程式函式在標籤上顯示從列表中選擇的專案。
def OnCombo(self, event):
self.label.SetLabel("selected "+ self.combo.GetValue() +" from Combobox")
def OnChoice(self,event):
self.label.SetLabel("selected "+ self.choice.
GetString( self.choice.GetSelection() ) +" from Choice")
完整的程式碼清單如下:
import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (300,200))
panel = wx.Panel(self)
box = wx.BoxSizer(wx.VERTICAL)
self.label = wx.StaticText(panel,label = "Your choice:" ,style = wx.ALIGN_CENTRE)
box.Add(self.label, 0 , wx.EXPAND |wx.ALIGN_CENTER_HORIZONTAL |wx.ALL, 20)
cblbl = wx.StaticText(panel,label = "Combo box",style = wx.ALIGN_CENTRE)
box.Add(cblbl,0,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
languages = ['C', 'C++', 'Python', 'Java', 'Perl']
self.combo = wx.ComboBox(panel,choices = languages)
box.Add(self.combo,1,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
chlbl = wx.StaticText(panel,label = "Choice control",style = wx.ALIGN_CENTRE)
box.Add(chlbl,0,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
self.choice = wx.Choice(panel,choices = languages)
box.Add(self.choice,1,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
box.AddStretchSpacer()
self.combo.Bind(wx.EVT_COMBOBOX, self.OnCombo)
self.choice.Bind(wx.EVT_CHOICE, self.OnChoice)
panel.SetSizer(box)
self.Centre()
self.Show()
def OnCombo(self, event):
self.label.SetLabel("You selected"+self.combo.GetValue()+" from Combobox")
def OnChoice(self,event):
self.label.SetLabel("You selected "+ self.choice.GetString
(self.choice.GetSelection())+" from Choice")
app = wx.App()
Mywin(None, 'ComboBox and Choice demo')
app.MainLoop()
以上程式碼產生以下輸出: