- 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()
以上代码产生以下输出: