在本文中,将介绍如何使用 tkinter Listbox 小部件来显示项目列表。Listbox 小部件是显示单行文本项的列表,允许浏览项目并一次选择一个或多个项目。
要创建 Listbox 列表框,请使用如下所示的构造函数。
listbox = tk.Listbox(master, **options)
使用 insert() 方法添加列表项
要将选项填充到 Listbox,首先创建一个选项列表。然后,使用 insert() 方法将列表内容插入列表框。
import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')
langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']
listbox = tk.Listbox(
root,
height=6,
width=20,
selectmode=tk.EXTENDED
)
listbox.pack(expand=True)
for item in langs:
listbox.insert(tk.END, item)
root.mainloop()
其中,选择模式 selectmode,该选项确定可以选择的数量以及鼠标拖动将如何影响选项。
- tk.BROWSE– 允许单个选择。
- tk.EXTENDED– 通过单击第一项并拖动,选择任何相邻的多个选项。
- tk.SINGLE– 允许选择一行,并且不能拖动鼠标。
- tk.MULTIPLE– 鼠标单击选中任意行。
使用 listvariable 参数添加列表项
更简单的方法是使用 listvariable 参数,该参数必须设置为 StringVar 对象。
import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')
langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']
var = tk.StringVar()
var.set(langs)
listbox = tk.Listbox(
root,
listvariable=var,
height=6,
width=20,
selectmode=tk.EXTENDED
)
listbox.pack(expand=True)
root.mainloop()
向列表框添加滚动条
以上代码示例创建了一个包含 9 个选项的列表框。如果列表框的 height 参数设置小于选项的数量,列表框需要滑动查看,可以向列表框添加滚动条。
import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')
langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']
var = tk.StringVar()
var.set(langs)
listbox1 = tk.Listbox(
root,
listvariable=var,
height=6,
width=20,
selectmode=tk.EXTENDED
)
listbox1.pack(expand=True)
scrollbar = tk.Scrollbar(root, orient=tk.VERTICAL)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
listbox2 = tk.Listbox(
root,
listvariable=var,
height=6,
width=20,
selectmode=tk.EXTENDED,
yscrollcommand=scrollbar.set
)
listbox2.pack(expand=True)
scrollbar.config(command=listbox2.yview)
root.mainloop()
获取选定的项目
使用 get() 方法,可以获取列表框的内容。
get(first, last=None )
可以利用索引号获取多个项目。
import tkinter as tk
root = tk.Tk()
from tkinter.messagebox import showinfo
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')
def get_item():
getval=listbox.get('active')
msg = f'你选择: {getval}'
showinfo(title='提示', message=msg)
langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']
var = tk.StringVar()
var.set(langs)
listbox = tk.Listbox(
root,
listvariable=var,
height=6,
width=20,
selectmode=tk.EXTENDED
)
listbox.pack(pady=60)
button=tk.Button(root, text='获取选定内容', command=get_item)
button.pack()
root.mainloop()
使用 curselection() 方法,可以获取一个或多个所选元素的索引号,通过索引号获取所选内容。
import tkinter as tk
root = tk.Tk()
from tkinter.messagebox import showinfo
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')
def get_item():
getval1=listbox.curselection()
getval2=",".join([listbox.get(i) for i in getval1])
msg = f'你选择: {getval2}'
showinfo(title='提示', message=msg)
langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']
var = tk.StringVar()
var.set(langs)
listbox = tk.Listbox(
root,
listvariable=var,
height=6,
width=20,
selectmode=tk.EXTENDED
)
listbox.pack(pady=60)
button=tk.Button(root, text='获取选定内容', command=get_item)
button.pack()
root.mainloop()
删除项目
如果不再需要列表框中的某些选项,可以简单地使用 delete() 方法将其删除。
delete(first, last=None)
可以利用索引号删除多个项目。
import tkinter as tk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Listbox 列表框演示')
def delete_selected():
listbox.delete('active')
def delete_all():
listbox.delete(0,'end')
langs = ['Java', 'C#', 'C', 'C++', 'Python','Go', 'JavaScript', 'PHP', 'Swift']
var = tk.StringVar()
var.set(langs)
listbox = tk.Listbox(
root,
listvariable=var,
height=6,
width=20,
selectmode=tk.EXTENDED
)
listbox.pack(pady=60)
button1=tk.Button(root, text='删除所选项目', command=delete_selected)
button1.pack()
button2=tk.Button(root, text='删除所有项目', command=delete_all)
button2.pack()
root.mainloop()
其他常用方法:
方法 | 说明 |
activate(index) | 选择给定索引指定的行。 |
index(i) | 获取项目的索引号。 |
nearest(y) | 返回相对于列表框小部件最接近 y 坐标 y 的可见行的索引。 |
see(index) | 调整列表框的位置,使索引引用的行可见。 |