组合框就像编辑控件和列表框的组合。可显示为静态列表,文本字段可编辑或只读;在不同的平台上,它可以是带有文本字段的下拉列表;也可以是一个没有文本字段的下拉列表。
一、wx.TextEntry
wx.ComboBox的文本编辑框中许多方法都在类wx.TextEntry中,wx.Entry是wx.ComboBox和wx.TextCtrl的公共基类。其常用方法有:
- AppendText(self, text):将文本追加到文本控件的末尾。
- AutoComplete (self, choices):用提供的choices启用单行文本控件中键入的文本的自动补全功能。
- AutoComplete (self, completer):用提供的补全器对象启用自动补全。
- AutoCompleteDirectories(self):调用此函数以启用使用文件系统目录自动补全文本。
- AutoCompleteFileNames(self):调用此函数可启用使用所有有效文件系统路径自动补全单行文本控件中键入的文本。
- CanCopy(self):如果所选内容可以复制到剪贴板,则返回True。
- CanCut(self):如果所选内容可以剪切到剪贴板,则返回True。
- CanPaste(self):如果剪贴板的内容可以粘贴到文本控件中,则返回True。
- CanRedo(self):如果有重做工具可用,并且最后一个操作可以重做,则返回True。
- CanUndo(self):如果有一个撤销工具可用,并且最后一个操作可以撤销,则返回True。
- ChangeValue(self, value):设置新的文本控件值。
- Clear(self):清除控件中的文本。
- Copy(self):将选定的文本复制到剪贴板。
- Cut(self):将所选文本复制到剪贴板并从控件中删除。
- ForceUpper(self):将输入到控件中的所有文本转换为大写。
- GetHint(self):返回当前提示字符串。
- GetInsertionPoint(self):返回插入点或光标位置。
- GetLastPosition(self):返回文本控件中最后一个位置的从零开始的索引,该索引与控件中的字符数相等。
- GetMargins(self):返回控件使用的边距。
- GetRange(self, from_, to_):返回包含控件中从from_到to_位置开始的文本的字符串。
- GetSelection(self):获取当前选择范围。
- GetStringSelection(self):获取控件中当前选定的文本。
- GetValue(self):获取控件的内容。
- IsEditable(self):如果控件内容可以由用户编辑,则返回True(请注意,它总是可以由程序更改)。
- IsEmpty(self):如果控件当前为空,则返回True。
- Paste(self):将文本从剪贴板粘贴到文本项。
- Redo(self):如果有重做功能,并且上一个操作可以重做,则重做上一个操作。如果没有重做工具,则什么也不做。
- Remove(self, from_, to_):删除从第一个给定位置开始直到(但不包括)最后一个位置的字符的文本。
- Replace(self, from_, to_, value):用给定文本替换从第一个位置到(但不包括)最后一个位置的字符的文本。
- SelectAll(self):选择控件中的所有文本。
- SelectNone(self):取消选择控件中的选定文本。
- SetEditable(self, editable):使文本项可编辑或只读,覆盖wx.TE_READONLY标志。
- SetHint(self, hint):设置文本控件中显示的提示。
- SetInsertionPoint(self, pos):在给定位置设置插入点。
- SetInsertionPointEnd(self):设置文本控件末尾的插入点。
- SetMargins (self, pt):设置边距。
- SetMargins (self, left, top=-1):设置边距。
- SetMaxLength(self, len):设置用户可以在控件中输入的最大字符数。
- SetSelection(self, from_, to_):选择从第一个位置开始直到(但不包括)最后一个位置的字符的文本。
- SetValue(self, value):设置新的文本控件值。
- Undo(self):如果存在撤消功能,并且上一个操作可以撤消,则撤消上一个操作。如果没有撤销功能,则不执行任何操作。
- WriteText(self, text):将文本写入文本控件的当前插入位置。
二、wx.ComboBox
wx.ComboBox是一个单行文本字段、一个带有向下箭头图像的按钮和一个列表框的组合。当您按下按钮时,会出现一个列表框。用户只能从提供的字符串列表中选择一个选项。
wx.ComboBox具有以下窗口样式:
- wx.CB_SIMPLE:创建一个具有永久显示列表的组合框(仅Windows系统)。
- wx.CB_DROPDOWN:创建带有下拉列表的组合框(仅MSW 和Motif)。
- wx.CB_READONLY:它允许用户从选项列表中选择,但不允许输入列表中不存在的值。
- wx.CB_SORT:列表框中的选项自动按照字母顺序排序。
- wx.TE_PROCESS_ENTER:该控件将生成可以由程序处理的wxEVT_TEXT_ENTER事件。
wx.ComboBox可能发出以下事件:
- EVT_COMBOBOX:当列表中的项被选中时,处理wx.EVT_COMBOBOX事件。注意,调用GetValue返回选择的新值。
- EVT_TEXT:当组合框文本发生变化时,处理wx.EVT_TEXT事件。
- EVT_TEXT_ENTER:当组合框中的RETURN被按下时,处理wxEVT_TEXT_ENTER事件(注意,要接收此事件,组合框必须是用wx.TE_PROCESS_ENTER样式来创建)。
- EVT_COMBOBOX_DROPDOWN:处理wx.EVT_COMBOBOX_DROPDOWN事件,该事件在显示组合框的列表框部分时生成(下拉)。
- EVT_COMBOBOX_CLOSEUP:处理wx.EVT_COMBOBOX_CLOSEUP事件,该事件在组合框的列表框消失(关闭)时生成。此事件仅在与上面的wx.EVT_COMBOBOX_DROPDOWN相同的平台上生成。
wx.ComboBox常用方法:
- Dismiss(self):隐藏组合框的列表框部分。
- FindString(self, string, caseSensitive=False):查找与给定字符串匹配的项。
- GetCount(self):返回控件中的项数。
- GetCurrentSelection(self):返回当前正在选择的项。
- GetInsertionPoint(self):返回插入点或光标位置。
- GetSelection(self):返回所选项的索引,如果没有选择项,则返回NOT_FOUND。
- GetTextSelection(self):获取当前选择范围。
- GetString(self, n):返回给定索引的项的标签。索引必须是有效的,即小于GetCount返回的值,否则会触发断言。
- GetStringSelection(self):获取控件中当前选定的文本。如果没有选择,则返回的字符串为空。
- IsListEmpty(self):如果组合框选项列表为空,则返回True。使用此方法代替(本类中不可用)IsEmpty来测试项列表是否为空。
- IsTextEmpty(self):如果组合框的文本为空,则返回True。使用此方法代替(本类中不可用)IsEmpty来测试当前输入到组合框中的文本是否为空。
- Popup(self):显示组合框的列表框部分。
- SetSelection (self, n):将选定项设置为给定项n,如果n == NOT_FOUND则完全删除选定项。注意,这不会触发任何命令事件,也不会取消控件中支持多个选择的任何其他项。
- SetString(self, n, text):更改指定组合框项的文本。请注意,如果项目是当前选中的项目,也就是说,如果它的文本显示在组合框的文本部分,那么文本也会被新文本替换。
- SetTextSelection(self, from_, to_):选择从第一个位置开始直到(但不包括)最后一个位置的字符的文本。如果两个参数都等于-1,则选择控件中的所有文本。
- SetValue(self, text):设置组合框文本字段的文本。对于正常的可编辑组合框,带有文本输入字段调用此方法将生成wx.EVT_TEXT事件,与wx.TextEntry.SetValue行为一致,如果不希望这样,请使用wx.TextEntry.ChangeValue。对于CB_READONLY样式的控件,在组合框选项列表中(对此的检查是不区分大小写的) 必须已有该字符串。
图1:wx.ComboBox类继承关系
三、wx.ComboBox演示
下面代码演示如何调用wx.ComboBox。
#下拉列表框(wx.ComboBox)
import wx
class SampleComboBox(wx.Frame):
def __init__(self, *args, **kw):
super(SampleComboBox, self).__init__(*args, **kw)
self.InitUi()
def InitUi(self):
#设置标题
self.SetTitle("实战wxPython: ComboBox演示")
#设置窗口尺寸
self.SetSize(400, 240)
panel = wx.Panel(self)
wx.StaticText(panel, label="Linux 发行版本:", pos=(50, 30))
#创建一个只读下拉列表,可选择Linux的各种发行版本
distros = ["Ubuntu", "Arch", "Fedora", "Debian", "Mint"]
cb = wx.ComboBox(panel, pos = (160, 30), choices = distros, style = wx.CB_READONLY)
cb.SetSelection(0)
cb.Bind(wx.EVT_COMBOBOX, self.OnSelect)
#用于显示选中的Linux版本
self.stcInfo = wx.StaticText(panel, label="", pos=(50, 140))
self.Centre()
def OnSelect(self, e):
linux = e.GetString()
self.stcInfo.SetLabel("当前Linux 发行版本: " + linux)
def main():
app = wx.App()
sample = SampleComboBox(None)
sample.Show()
app.MainLoop()
if __name__ == "__main__":
main()
在上述代码中,我们创建了一个只读下拉列表框,可以在下拉列表中选择一个Linux的发行版本。选中项的文字信息将在窗口下边同步显示
图2:wx.ComboBox演示
四、本文知识点
- 了解和使用下拉列表框wx.ComboBox。