Tkinter的Listbox 小部件用于显示项目列表,其中所有项目都是具有相同字体和颜色的文本项目。 用户可以根据小部件的配置从列表中选择多个要显示的项目。 列表框在创建时最初是空的,并且需要插入多行文本,这可以使用 insert 方法完成,其中索引和字符串必须作为参数给出,其中索引是列表和字符串中的项目编号 是要显示的文本项。
要创建一个列表框,可以像这样使用 tk.Listbox 类:
w = Listbox(master, option,..)
其中,master代表父窗口,option是widget可以使用的选项列表,options是逗号分隔的键值对。
2、管理Listbox项要将项目填充到 Listbox,首先创建一个使用项目列表初始化的 StringVar 对象。 然后将此 StringVar 对象分配给 listvariable 选项,如下所示:
list_items = StringVar(value=items)
listbox = tk.Listbox(
container,
height,
listvariable=list_items
)
要在列表框中添加、删除或重新排列项目,只需修改 list_items 变量。
3、选择Listbox项selectmode 选项确定是否可以一次选择单个项目或多个项目。
'browse'- 允许单一选择。'extended'- 允许多选。
默认情况下,选择模式是browse。 curselection() 方法返回当前选定索引的列表。
4、绑定选中的事件要在所选项目更改时执行函数,请将该函数绑定到<
listbox.bind('<>', callback)
5、完整示例
下面的程序显示一个包含编程语言列表的列表框。当选择一个或多个项目时,程序会在消息框上显示选定的项目:
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo
# create the root window
root = tk.Tk()
root.geometry('200x100')
root.resizable(False, False)
root.title('Listbox')
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
# create a list box
langs = ('Java', 'C#', 'C', 'C++', 'Python',
'Go', 'Javascript', 'PHP', 'Swift')
langs_var = tk.StringVar(value=langs)
listbox = tk.Listbox(
root,
listvariable=langs_var,
height=6,
selectmode='extended')
listbox.grid(
column=0,
row=0,
sticky='nwes'
)
# handle event
def items_selected(event):
""" handle item selected event
"""
# get selected indices
selected_indices = listbox.curselection()
# get selected items
selected_langs = ",".join([listbox.get(i) for i in selected_indices])
msg = f'You selected: {selected_langs}'
showinfo(
title='Information',
message=msg)
listbox.bind('<>', items_selected)
root.mainloop()
运行结果如下:
第一步,创建一个包含编程语言列表的 StringVar
langs = ('Java', 'C#', 'C', 'C++', 'Python',
'Go', 'Javascript', 'PHP', 'Swift')
langs_var = tk.StringVar(value=langs)
第二步,创建一个新的 Listbox 小部件并将 StringVar 对象分配给 list 变量:
listbox = tk.Listbox(
root,
listvariable=langs_var,
height=6,
selectmode='extended')
height显示六种编程语言,无需滚动。 selectmode=‘extended’ 允许多选。
第三步,定义一个在选择一个或多个项目时将调用的函数。 items_selected() 函数显示当前选定列表项的列表:
Listbox小部件最常用的选项列表如下:
listbox.bind('<>', items_selected)
最后,将 items_selected 函数与 ‘<>’ 事件绑定:
def items_selected(event):
""" handle item selected event
"""
# get selected indices
selected_indices = listbox.curselection()
# get selected items
selected_langs = ",".join([listbox.get(i) for i in selected_indices])
msg = f'You selected: {selected_langs}'
showinfo(
title='Information',
message=msg)
以下代码演示了如何向列表框添加滚动条:
import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo
# create the root window
root = tk.Tk()
root.geometry('200x100')
root.resizable(False, False)
root.title('Listbox')
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
# create a list box
langs = ('Java', 'C#', 'C', 'C++', 'Python',
'Go', 'Javascript', 'PHP', 'Swift')
langs_var = tk.StringVar(value=langs)
listbox = tk.Listbox(
root,
listvariable=langs_var,
height=6,
selectmode='extended')
listbox.grid(
column=0,
row=0,
sticky='nwes'
)
# link a scrollbar to a list
scrollbar = ttk.Scrollbar(
root,
orient='vertical',
command=listbox.yview
)
listbox['yscrollcommand'] = scrollbar.set
scrollbar.grid(
column=1,
row=0,
sticky='ns')
# handle event
def items_selected(event):
""" handle item selected event
"""
# get selected indices
selected_indices = listbox.curselection()
# get selected items
selected_langs = ",".join([listbox.get(i) for i in selected_indices])
msg = f'You selected: {selected_langs}'
showinfo(
title='Information',
message=msg)
listbox.bind('<>', items_selected)
root.mainloop()
6、Listbox常用参数及方法说明
6.1 常用构建参数
bg:在标签和指标后面,显示正常的背景颜色。bd:这表示指标周围的边框大小。它的默认值为两个像素。cursor:当鼠标移到Listbox上时,会出现一个光标,就是这个光标。font:这表示列表框中存在的文本的字体。fg:这表示列表框中文本的颜色。height:这表示列表框中的行数。行数的默认值为 10。highlightcolor:这表示焦点在小部件中时的焦点突出显示颜色。highlightthickness:这表示焦点高光厚度。relief:通过relief选择边框底纹效果为三维。浮雕的默认值为 SUNKEN。selectbackground:这表示在显示所选文本时要使用的背景颜色。selectmode:这指定可以选择的项目数,以及鼠标拖动对选择的影响Browse:这是默认设置。可以从列表框中选择一行。如果单击某个项目并将其拖动到其他行,则所选行将与鼠标一起移动。Single:只能选择一行,不能拖动鼠标;无论在何处单击按钮,都会选择相应的行。Multiple:一次可以选择的行数不固定。可以通过单击任何线及其切换来确定选择。Extended:一次可以选择的相邻组的行数不固定,通过单击第一行拖动最后一行来选择。width:这表示小部件中存在的字符的宽度。小部件的默认值为 20。xscrollcommand:链接到 Listbox 小部件的水平滚动条允许用户水平滚动 Listbox。yscrollcommand:链接到 Listbox 小部件的垂直滚动条允许用户垂直滚动 Listbox。 6.2 Listbox常用方法如下:
activate(index):选择作为参数传递的索引指定的行。curselection():从零开始的被选元素行号放入一个元组中,由curselection()方法返回。如果没有选择,则返回一个空元组。delete(first, last=None):使用此选项删除范围 [first, last] 中的索引。如果省略第二个参数,则删除具有第一个索引的单行。get(first, last=none):由从第一行到最后一行的索引包含在元组中并返回的文本组成的行。如果省略第一个参数,则返回与第一行相似的行的文本。index(i):Listbox 可见部分的位置使得小部件的顶部由索引为 i 的行组成。insert(index, *elements):多行插入到列表框中,将索引标记的行保持在所有行之上。如果要将新行添加到列表框的末尾,则必须使用 END 作为第一个参数。nearest(y):返回可见且最接近 y 坐标 Listbox 小部件的 y 相对值的行的索引。see(index):调整列表框的位置,使索引引用的行可见。size():返回列表框中的行数。xview():水平滚动条的命令选项设置为xview()方法,使Listbox可以水平滚动。xview_moveto(fraction):当 Listbox 滚动时,listbox 中最长行宽度的最左边部分出现在 Listbox 左侧之外。分数的范围是[0,1]。xview_scroll(number, what):该方法用于水平滚动Listbox。什么参数使用 UNITS,它相对于字符滚动或 PAGES,它相对于页面滚动列表框的宽度。 number 参数告诉滚动的次数。yview():垂直滚动条的命令选项设置为yview()方法,使Listbox可以垂直滚动。yview_moveto(fraction):当 Listbox 滚动时,Listbox 中最长行宽度的顶部部分出现在 Listbox 左侧之外。分数的范围是[0,1]。yview_scroll(number, what):该方法用于垂直滚动Listbox。哪个参数使用 UNITS(按字符滚动)或 PAGES(按列表框高度按页面滚动)。 number 参数告诉滚动多少。



