tkinter 的 Listbox
组件用于显示和选择一个或多个项目的列表。它是一个非常有用的组件,可以在它上面进行各种操作,例如添加、删除、选择项目等。下面具体介绍Listbox组件常用的属性和方法:
一、常用属性
1、height:设置 Listbox 的显示行数
box = tk.Listbox(app, height=10)
2、width:设置 Listbox 的宽度(以字符数为单位)
box = tk.Listbox(app, width=20)
3、listvariable:绑定一个 Tkinter 变量,以便设置列表项
lists = tk.StringVar(value=['item1', 'item2', 'item3', 'item4'])
box = tk.Listbox(app, listvariable=lists)
4、fg:设置项目文本的字体颜色
box = tk.Listbox(app, fg="blue")
5、bg:设置 Listbox 的背景颜色
box = tk.Listbox(app, bg="lightyellow")
6、selectmode:设置选择模式,默认单选,可以设置值有'single'
、'browse'
、'multiple'
或 'extended'
box = tk.Listbox(app, selectmode="multiple")
7、activestyle:设置鼠标悬停时的显示样式,可以是 'dotbox'
、'underline'
或 'none'
box = tk.Listbox(app, activestyle="underline")
二、常用方法
1、insert(index, *elements):在指定位置插入一个或多个列表项,index
可以是整数索引或 'end'
box.insert(tk.END, 'new')
2、delete(first, last=None):删除从 first
到 last
位置的项目。如果只提供 first
参数,将删除该位置的单个项目
box.delete(0)
3、get(first, last=None):获取从 first
到 last
位置的项目。如果只提供 first
参数,将返回该位置的单个项目
item = box.get(0)
4、size():获取 Listbox 中项目的总数
count = box.size()
5、curselection():获取当前选中项目的索引
selected_item = box.curselection()
6、selection_set(first, last=None):选择从 first
到 last
位置的项目。如果只提供 first
参数,将选择该位置的单个项目
box.select_set(0, 1)
7、selection_clear(first, last=None):取消选择从 first
到 last
位置的项目。如果只提供 first
参数,将取消选择该位置的单个项目
box.selection_clear(0, 1)
8、bind:可以将事件绑定到 Listbox
组件,例如在用户选择某个项目时触发某个事件
box.bind("<<ListboxSelect>>", on_select)
三、完整示例
import tkinter as tk
from tkinter import messagebox
app = tk.Tk()
app.geometry("500x300+400+300")
box = tk.Listbox(app, height=10, width=20, fg="blue", bg="lightyellow", activestyle="underline")
for i in range(5):
box.insert(tk.END, f"Item {i+1}")
box.place(x=10, y=10)
print(box.get(0))
print(box.size())
def on_select(event):
selecteds = box.curselection()
if selecteds:
current_sel = selecteds[0]
box.selection_clear(0, tk.END)
box.selection_set(current_sel)
messagebox.showinfo("Hello", 'item selected')
box.bind("<<ListboxSelect>>", on_select)
def insert_item():
box.insert(tk.END, 'new')
def delete_item():
box.selection_clear(0, 1)
insert_btn = tk.Button(app, text="添加", command=insert_item)
insert_btn.place(x=10, y=200)
delete_btn = tk.Button(app, text="删除", command=delete_item)
delete_btn.place(x=60, y=200)
app.mainloop()
实现效果如下: