在本文中,将介绍如何使用 tkinter Listbox 小部件来显示项目列表。Listbox 小部件是显示单行文本项的列表,允许浏览项目并一次选择一个或多个项目。
要创建 Listbox 列表框,请使用如下所示的构造函数。
listbox = tk.Listbox(master, **options)
使用 insert() 方法添加列表项要将选项填充到 Listbox,首先创建一个选项列表。然后,使用 insert() 方法将列表内容插入列表框。
import tkinter as tkroot = 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 tkroot = 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 tkroot = 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 tkroot = tk.Tk()from tkinter.messagebox import showinforoot.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 tkroot = tk.Tk()from tkinter.messagebox import showinforoot.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 tkroot = 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)
调整列表框的位置,使索引引用的行可见。