Listbox 组件
Listbox 为列表框控件,它可以包含一个或多个文本项(text item),可以设置为单选或多选。使用方式为 Listbox(root,option...)
。
常用的参数列表如下:
参数 | 描述 |
---|---|
master | 代表了父窗口 |
bg | 背景色,如 bg="red”,bg="#FF56EF" |
fg | 前景色,如 fg="red" ,fg="#FF56EF" |
height | 设置显示高度、如果未设置此项,其大小以适应内容标签 |
relief | 指定外观装饰边界附近的标签默认是平的,可以设置的参数: flat、 groove、 raised、 ridge、 solid、 sunken |
width | 设置显示宽度,如果未设置此项,其大小以适应内容标签 |
state | 设置组件状态: 正常(normal), 激活(active), 禁用(disabled) |
bd | 设置 Button 的边框大小; bd(bordwidth) 缺省为1或2个像素 |
selectmode | 选择模式,MULTIPLE: 多选、BROWSE: 通过鼠标的移动选择、EXTENDED: shift 和 ctrl 配合使用 |
listvariable | 设置 listvariable 属性 |
一些常用的函数:
函数 | 描述 |
---|---|
insert | 追加 item, 如 listbox.insert(0," addBox1 ", addBox2") |
delete | 删除 item, 如 listbox.delete(3,4), 删除全部(0,END) |
select_set | 选中,如 listbox.select_set(0,2) |
select_clear | 取消选中如 listbox.select_clear(0,1) |
get | 返回制定索引的项值,如 listbox.get(1); 返回多个项值,返回元组,如 listbox.get(0,2); 返回当前选中项的索引 listbox.curselection() |
curselection() | 返回当前选中项的索引,如 listbox.curselection() |
selection_includes | 判断当前选中的项目中 是否包含某项,如 listbox.selection includes(4) |
如果需要提供选项给用户选择,单选可以用 Radiobutton 组件,多选则可以用 Checkbutton 组件。但如果提供的选项非常多,例如选择你所在的城市,通过 Radiobutton 和 Checkbutton 组件来实现直接导致的结果就是:用户界面不够存放那么多按钮!
这时候就可以考虑使用 Listbox 组件,Listbox 是以列表的形式显示出来,并支持滚动条操作,所以对于在需要提供大量选项的情况下会更适用一些。
当创建一个 Listbox 组件的时候,它是空的(里边什么都没有)。所以,首先要做的第一件事就是添加一行或多行文本进去。使用 insert() 方法添加文本,该方法有两个参数:第一个参数是插入的索引号,第二个参数是插入的字符串。索引号通常是项目的序号(第一项的序号是 0 )。
当然对于多个项目,应该使用循环:
python
import tkinter as tk
root = tk.Tk()
root.geometry('500x300')
lb = tk.Listbox(root)
lb.pack()
# 创建一个空列表
for item in ['鸡蛋', '鸭蛋', '鹅蛋', '狗蛋']:
lb.insert(tk.END, item)
# the_lb.delete(tk.END, item)
# 删除数据
button = tk.Button(root, text='删除', command=lambda x=lb: x.delete(tk.ACTIVE))
button.pack()
# 添加数据
button = tk.Button(root, text='添加', command=lambda x=lb: x.insert(tk.END, '数据'))
button.pack()
root.mainloop()
使用 delete() 方法删除列表中的项目,最常用的操作是删除列表中的所有项目:
python
the_lb.delete(tk.END, item)
当然也可以删除指定的项目,下边添加一个独立按钮来删除 ACTIVE 状态的项目:
跟 END 一样,这个 ACTIVE 是一个特殊的索引号,表示当前被选的项目)
python
button = Button(root, text='删除', command=lambda x=the_lb: x.delete(ACTIVE))
button.pack()
最后,这个 Listbox 组件根据 selectmode 选项提供了四种不同的选择模式:
- SINGLE(单选)、
- BROWSE(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、
- MULTIPLE(多选)和 EXTENDED(也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖动光标实现)。
- 默认的选择模式是 BROWSE。