列表框控件在一个矩形区域内,可以显示多条文本数据项,当文本数据项的条目超过矩形区域的宽度或高度后,列表框控件会自动添加滚动条,用户可以通过滚动条浏览更多的文本数据项。
列表框控件的主要作用是为用户提供多个数据项,用户可以在提供的多个数据项中选择一个或多个数据项。
与列表框控件相关的类是wx. ListBox,wx. ListBox的构造函数为:
ListBox(parent, id=ID_ANY, pos=DefaultPosition, size=DefaultSize, choices=[],style=0,validator=DefaultValidator, name=ListBoxNameStr)
其构造函数的参数说明如下:
parent:该控件的父窗口,可以是窗体对象,也可以是面板对象,类型是wx.Window。
id:控件标识符。使用-1可以自动创建一个唯一的标识,类型是wx.WindowID。
pos: 控件在父窗口的起始位置,类型是wx.Point。
size: 控件的宽度和高度,类型是wx.Size。
choices:字符串列表,用于显示的文本数据项。类型是列表。
style:控件样式。
validator:窗口验证器。
name:控件的名称。
参数style设定了wx. ListBox的输出样式,主要样式如下:
wx.LB_SINGLE: 设置该样式后,用户只能选择一个文本数据项。
wx.LB_MULTIPLE: 设置该样式后,用户可以选择多个文本数据项。
wx.LB_EXTENDED: 设置该样式后,用户可以通过使用shift和鼠标键来选择一定范围内的连续的文本数据项。
wx.LB_HSCROLL: 设置该样式后,当文本数据项的内容超过控件的宽度后,控件会自动创建一个水平滚动条。
wx.LB_ALWAYS_SB: 设置该样式后,列表框将始终显示一个垂直的滚动条。
wx.LB_NEEDED_SB: 设置该样式后,只有在需要的情况下,控件才会创建一个垂直的滚动条。
wx.LB_NO_SB: 设置该样式后,控件永远不会创建一个垂直的滚动条。
wx.LB_SORT: 设置该样式后,控件内的文本数据项将按照字母顺序进行排序。
样式可以使用“|”符号来组合使用。
关于wx. ListBox的方法
wx. ListBox类提供了一些方法用来操作列表框控件,下面列出了wx. ListBox类提供的一些常用方法,更多方法请参见官方API文档。
https://docs.wxpython.org
Append(item):把字符串项目添加到列表框的尾部。
Clear():清空列表框。
Delete(n):删除列表框中索引为n的项目。
FindString(string):返回给定字符串的整数位置,如果没有发现则返回-1。
GetCount():返回列表中字符串的数量。
InsertItems(items, pos):插入参数items中的字符串列表到该列表框中pos参数所指定的位置前。位置0表示把项目放在列表的开头。
关于wx. ListBox的事件
wx.ListBox可以发送以下两种类型的事件。
EVT_LISTBOX: 当选择列表中的项目或选择更改时,发送该事件。
EVT_LISTBOX_DCLICK: 当用户双击列表框时,发送该事件。
案例代码:
import wx
class ListBoxFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'ListBox',size=(400, 400))
panel = wx.Panel(self, -1)
sampleList = ['Java编程基础', 'Python编程基基础', '数据库技术', '数据结构与算法', 'HTML技术', 'CSS技术']
listBox = wx.ListBox(panel, -1, (100, 50), (200, 120), sampleList,
wx.LB_SINGLE)
listBox.SetSelection(1)
# 绑定EVT_LISTBOX事件
self.Bind(wx.EVT_LISTBOX, self.OnSelectChange,listBox)
# 绑定EVT_LISTBOX_DCLICK事件
self.Bind(wx.EVT_LISTBOX_DCLICK, self.OnDoubleClick,listBox)
#listBox选择事件处理方法
def OnSelectChange(self,event):
wx.MessageBox("您改变了选项")
#listBox双击事件处理方法
def OnDoubleClick(self,event):
wx.MessageBox("您双击了列表框")
if __name__ == '__main__':
app = wx.PySimpleApp()
ListBoxFrame().Show()
app.MainLoop()