Listbox
列表框
Listbox(列表框)组件用于显示一个选择列表。Listbox 只能包含文本项目,并且所有的项目都需要使用相同的字体和颜色。根据组件的配置,用户可以从列表中选择一个或多个选项。
通常被用于显示一组文本选项,,Listbox 组件跟 Checkbutton
和 Radiobutton
组件类似,不过 Listbox 是以列表的形式来提供选项的。
执行自定义函数时,通常使用实例名.curselection()
”或 selected
”来获取选中项的位置索引。由于列表框实质上就是将Python 的列表类型数据可视化呈现,在程序实现时,也可直接对相关列表数据进行操作,然后再通过列表框展示出来,而不必拘泥于可视化控件的方法。
用法和参数
Listbox(master=None, **options)
master
– 父组件**options
– 组件选项,下方表格详细列举了各个选项的具体含义和用法:
选项 | 含义 |
---|---|
background /bg | 1. 设置背景颜色 2. 默认值由系统指定 |
borderwidth /bd | 1. 指定 Listbox 的边框宽度 2. 默认值由系统指定,通常是 2 像素 |
cursor | 1. 指定当鼠标在 Listbox 上飘过的时候的鼠标样式 2. 默认值由系统指定 |
exportselection | 1. 指定选中的项目文本是否可以被复制到剪贴板 2. 默认值是 True 3. 可以修改为 False 表示不允许复制项目文本 |
font | 1. 指定 Listbox 中文本的字体 2. 默认值由系统指定 |
foreground /fg | 1. 设置 Listbox 的文本颜色 2. 默认值由系统指定 |
height | 1. 设置 Listbox 显示的行数(不是像素) 2. 默认值是 10 |
highlightbackground | 1. 指定当 Listbox 没有获得焦点的时候高亮边框的颜色 2. 默认值由系统指定,通常是标准背景颜色 |
highlightcolor | 1. 指定当 Listbox 获得焦点的时候高亮边框的颜色 2. 默认值由系统指定 |
highlightthickness | 1. 指定高亮边框的宽度 2. 默认值是 1 |
listvariable | 1. 指向一个 StringVar 类型的变量,该变量存放 Listbox 中所有的项目 2. 在 StringVar 类型的变量中,用空格分隔每个项目,例如 var.set(“鸡蛋 鸭蛋 鹅蛋 李狗蛋”) |
relief | 1. 指定边框样式 2. 默认值是 “sunken” |
selectbackground | 1. 指定当某个项目被选中的时候背景颜色 2. 默认值由系统指定 |
selectborderwidth | 1. 指定当某个项目被选中的时候边框的宽度 2. 默认是由 selectbackground 指定的颜色填充,没有边框 3. 如果设置了此选项,Listbox 的每一项会相应变大,被选中项为 “raised” 样式 |
selectforeground | 1. 指定当某个项目被选中的时候文本颜色 2. 默认值由系统指定 |
selectmode | 1. 决定选择的模式 2. 四种不同的选择模式:“single”(单选)、“browse”(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、“multiple”(多选)和 “extended”(也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现) 3. 默认是 “browse” |
setgrid | 1. 指定一个布尔类型的值,决定是否启用网格控制 2. 默认值是 False |
takefocus | 1. 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来) 2. 默认值是 True |
width | 1. 设置 Listbox 的宽度(单位是文本单元) 2. 文本单元是英文字母的平均宽度(所以如果该选项设置为 2,那么是无法容纳"ww"这两个宽度大于平均宽度的字母的) 3. 默认值是 20 |
xscrollcommand | 1. 为 Listbox 组件添加一条水平滚动条 2. 将此选项与 Scrollbar 组件相关联即可 |
yscrollcommand | 1. 为 Listbox 组件添加一条垂直滚动条 2. 将此选项与 Scrollbar 组件相关联即可 |
justify | 文本对齐方式,可以设置"center" , "left" , "center" , "right" |
方法
方法 | 功能描述 |
---|---|
curselection() | – 返回一个元组,包含被选中的选项的序号(从 0 开始) – 如果没有选中任何选项,返回一个空元组 |
delete(first, last=None) | 删除参数 first 到 last 范围内(包含 first 和 last)的所有选项 如果忽略 last 参数,表示删除 first 参数指定的选项 |
insert(index, *elements) | – 添加一个或多个项目到 Listbox 中 – 使用 lb.insert(“end”) 添加新选项到末尾 |
get(first, last=None) | – 返回一个元组,包含参数 first 到 last 范围内(包含 first 和 last)的所有选项的文本 – 如果忽略 last 参数,表示返回 first 参数指定的选项的文本 |
size() | 返回列表框行数 |
activate(index) | 将给定索引号对应的选项激活(在其文本下方画一条下划线) |
bbox(index) | – 返回给定索引号对应的选项的边框 – 返回值是一个以像素为单位的 4 元祖表示边框:(xoffset, yoffset, width, height) – xoffset 和 yoffset 表示距离左上角的偏移位置 – 返回的 width 是文本的实际宽度(像素为单位) – 如果指向的选项是不可见的,那么返回值是 None |
index(index) | 返回与 index 参数相应的选项的序号(例如 lb.index(“end”)) |
itemcget(index, option) | – 获得 index 参数指定的项目对应的选项(由 option 参数指定) |
itemconfig(index, **options) | – 设置 index 参数指定的项目对应的选项(由可变参数 **option 指定) |
nearest(y) | – 返回与给定参数 y 在垂直坐标上最接近的项目的序号 |
scan_mark(x, y) | – 使用这种方式来实现 Listbox 内容的滚动 – 需要将鼠标按钮事件及当前鼠标位置绑定到 scan_mark(x, y) 方法,然后再将 事件及当前鼠标位置绑定到 scan_dragto(x, y) 方法,就可以实现 Listbox 在当前位置和 sacn_mack(x, y) 指定的位置 (x, y) 之间滚动 |
see(index) | – 调整列表框的位置,使得 index 参数指定的选项是可见的 |
selection_anchor(index) | – 在 index 参数的位置下一个锚点,此后你就可以通过特殊索引 “anchor” 访问 |
selection_includes(index) | – 返回 index 参数指定的选项的选中状态 – 返回 1 表示选中,返回 0 表示未选中 |
selection_clear(first, last=None) | – 取消参数 first 到 last 范围内(包含 first 和 last)选项的选中状态 – 如果忽略 last 参数,则只取消 first 参数指定选项的选中状态 |
selection_set(first, last=None) | – 设置参数 first 到 last 范围内(包含 first 和 last)选项为选中状态 – 如果忽略 last 参数,则只设置 first 参数指定选项为选中状态 |
参考示例
from tkinter import *
def ini():
Lstbox1.delete(0,END)
list_items = ["数学","物理","化学","语文","外语"]
for item in list_items:
Lstbox1.insert(END,item)
def clear():
Lstbox1.delete(0,END)
def ins():
if entry.get() != '':
if Lstbox1.curselection() == ():
Lstbox1.insert(Lstbox1.size(),entry.get())
else:
Lstbox1.insert(Lstbox1.curselection(),entry.get())
def updt():
if entry.get() != '' and Lstbox1.curselection() != ():
selected=Lstbox1.curselection()[0]
Lstbox1.delete(selected)
Lstbox1.insert(selected,entry.get())
def delt():
if Lstbox1.curselection() != ():
Lstbox1.delete(Lstbox1.curselection())
root = Tk()
root.title('列表框实验')
root.geometry('320x240')
frame1 = Frame(root,relief=RAISED)
frame1.place(relx=0.0)
frame2 = Frame(root,relief=GROOVE)
frame2.place(relx=0.5)
Lstbox1 = Listbox(frame1)
Lstbox1.pack()
entry = Entry(frame2)
entry.pack()
btn1 = Button(frame2,text='初始化',command=ini)
btn1.pack(fill=X)
btn2 = Button(frame2,text='添加',command=ins)
btn2.pack(fill=X)
btn3 = Button(frame2,text='插入',command=ins) # 添加和插入功能实质上是一样的
btn3.pack(fill=X)
btn4 = Button(frame2,text='修改',command=updt)
btn4.pack(fill=X)
btn5 = Button(frame2,text='删除',command=delt)
btn5.pack(fill=X)
btn6 = Button(frame2,text='清空',command=clear)
btn6.pack(fill=X)
root.mainloop()