从列表中选择的项目显示在文本字段中,默认情况下是可编辑的,但是可以在wx.CB_READONLY style 参数设置为只读。
wxPython API包含一个wx.Choice类,其目的也是一个下拉列表,是永久只读。
使用 wx.ComboBox 类构造函数的参数 −
Wx.ComboBox(parent, id, value, pos, size, choices[], style)
value参数是要显示在组合框的文本框中的文本。 它是由 choices[] 集合中的项目进行填充。
下面的样式参数定义为 wx.ComboBox -
S.N.
参数和说明
1
wx.CB_SIMPLE
组合框与永久显示的列表
2
wx.CB_DROPDOWN
组合框与下拉列表
3
wx.CB_READONLY
选择的项目是不可编辑
4
wx.CB_SORT
列表显示按字母顺序
下表显示了常用wx.ComboBox类的方法 −
S.N.
方法和说明
1
GetCurrentSelection ()
返回被选中的项目
2
SetSelection()
将给定索引处的项设置为选中状态
3
GetString()
返回给定索引处的项目关联的字符串
4
SetString()
给定索引处更改项目的文本
5
SetValue()
设置一个字符串作为组合框文本显示在编辑字段中
6
GetValue()
返回组合框的文本字段的内容
7
FindString()
搜索列表中的给定的字符串
8
GetStringSelection()
获取当前所选项目的文本
事件绑定器生成此类的事件如下 -
S.N.
事件和说明
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”代表字符串的数目使于选择列表的初始化。像组合框,项目被填充到 choices[]集合列表。
对于选择类,wx.CB_SORT为只有一个类型的参数定义。wx.EVT_CHOICE为只有一个事件绑定处理由该类发出的事件。
实例
下面的示例显示 wx.ComboBox 和 wx.Choice 的特点。这两个对象被放在一个垂直的盒子大小测定器(sizer)。这些项目用于填充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 & Choice Demo - www.yiibai.com')
app.MainLoop()
上面的代码产生下面的输出 -