Skip to content

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

image-20210221150100306

使用 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。