组合框控件是静态文本控件和列表框控件的组合体,在静态文本控件的右侧有一个带着向下箭头图片的按钮,当用户按下按钮时,列表框控件就会显示,用户从列表框控件中选择一个文本数据项,选中的文本数据项会显示在静态文本控件里。
与组合框控件相关的类是wx. ComboBox,wx. ComboBox的构造函数为:
ComboBox(parent, id=ID_ANY, value="", pos=DefaultPosition, size=DefaultSize, choices=[], style=0, validator=DefaultValidator, name=ComboBoxNameStr)
其构造函数的参数说明如下:
parent:该控件的父窗口,可以是窗体对象,也可以是面板对象,类型是wx.Window。
id:控件标识符。使用-1可以自动创建一个唯一的标识,类型是wx.WindowID。
value:默认选中的文本项。
pos: 控件在父窗口的起始位置,类型是wx.Point。
size: 控件的宽度和高度,类型是wx.Size。
choices:字符串列表,用于显示的文本数据项。类型是列表。
style:控件样式。
validator:窗口验证器。
name:控件的名称。
参数style设定了wx. ComboBox的输出样式,主要样式如下:
wx.CB_SIMPLE: 设置该样式后,会创建一个一直显示列表框的组合框。
wx.CB_DROPDOWN: 设置该样式后,会创建一个带有下拉列表框的组合框。
wx.CB_READONLY: 具有此样式的组合框允许用户从选项列表中进行选择,但不允许输入列表中不存在的值。
wx.CB_SORT: 设置该样式后,控件内的文本数据项将按照字母顺序进行排序。
wx.TE_PROCESS_ENTER: 设置该样式后,控件将发送事件EVT_TEXT_ENTER。
关于 wx.ComboBox的方法
wx.ComboBox类提供了一些方法用来操作组合框控件,下面列出了wx.ComboBox类提供的一些常用方法,更多方法请参见官方API文档。
https://docs.wxpython.org
Append(item):把字符串项目添加到组合框的尾部。
GetCount(self):返回组合框中的项数,返回值为int。
GetString(self, n):返回指定索引的项的文本串,返回值为字符串。
GetSelection(self):返回所选项的索引(int类型),如果未选择任何项,则返回NOT_FOUND。
SetSelection (self, n):将所选内容设置为给定的项n。
GetCurrentSelection(self):返回当前选址的项,返回值为int。
关于wx.ComboBox的事件
wx. ComboBox可以发送以下类型的事件:
EVT_COMBOBOX: 用户选择列表项目时,发送该事件。
EVT_TEXT: 当组合框的文本发生改变时,发送该事件。
EVT_TEXT_ENTER: 当在组合框中按回车键时发送该事件(请注意,必须使用 wx.TE_PROCESS_ENTER style创建组合框才能发送此事件)。
EVT_COMBOBOX_DROPDOWN: 控件显示组合框列表框部分时发送该事件。
EVT_COMBOBOX_CLOSEUP: 当组合框的列表框消失(关闭)时发送该事件。
案例代码:
import wx
class ComBoxFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'ComBox',size=(400, 400))
panel = wx.Panel(self, -1)
sampleList = ['Java编程基础', 'Python编程基基础', '数据库技术', '数据结构与算法', 'HTML技术', 'CSS技术']
comBox = wx.ComboBox(panel, -1,'Python编程基基础', (100, 50), (200, 120), sampleList,wx.CB_DROPDOWN)
comBox.SetSelection(1)
# 绑定EVT_COMBOBOX事件
self.Bind(wx.EVT_COMBOBOX, self.OnSelectChange,comBox)
# 绑定EVT_COMBOBOX_DROPDOWN事件
self.Bind(wx.EVT_COMBOBOX_DROPDOWN, self.OnShowListBoxClick,comBox)
#ComBox选择事件处理方法
def OnSelectChange(self,event):
wx.MessageBox("您改变了选项")
#ComBox显示下拉框事件
def OnShowListBoxClick(self,event):
wx.MessageBox("您显示了下拉框")
if __name__ == '__main__':
app = wx.App()
ComBoxFrame().Show()
app.MainLoop()案例代码执行效果图:
