wxPython - 组合框和选择类

wx.ComboBox 对象显示了一个可供选择的项目列表。 它可以配置为下拉列表或永久显示。

从列表中选择的项目显示在文本字段中,默认情况下是可编辑的,但可以在存在 wx.CB_READONLY 样式参数的情况下设置为只读。

wxPython API 包含一个wx.Choice 类,其对象也是一个下拉列表,它是永久只读的。

wx.ComboBox类构造函数使用的参数是 −

Wx.ComboBox(parent, id, value, pos, size, choices[], style)

value参数是combobox的文本框中要显示的文本。 它由 choices[] 集合中的项目填充。

为wx.ComboBox定义了如下 style 样式参数 −

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()

设置一个字符串作为combobox编辑框显示的文本

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"代表要初始化选择列表的字符串数。 与 comboBox 一样,该列表由 choices[] 集合中的项目填充。

对于 Choice 类,只定义了一个样式参数。 它是 wx.CB_SORT。 只有一个事件绑定程序处理此类发出的事件。 它是 wx.EVT_CHOICE。


示例

这个例子展示了 wx.ComboBox 和 wx.Choice 的特性。 两个对象都放在一个垂直的 box sizer 中。 列表中填充了 languages[] List 对象中的项目。

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()

以上代码产生如下输出 −

组合框输出

❮ wxPython 主要类