1.
#-*-coding:utf-8-*-
'''
第一个Listbox
Listbox为列表框控件,它可以包含一个或多个文本项(text item),可以设置为单选或多选
insert:向Listbox中插入item
'''
from tkinter import *
root = Tk()
lb = Listbox(root)
for item in ['python', 'tkinter', 'widget']:
lb.insert(END, item)
lb.pack()
root.mainloop()
2.Listbox可以选中多个item selectmode:指定Listbox选择item的几种模式
#-*-coding:utf-8-*-
'''
Listbox可以选中多个item
selectmode:指定Listbox选择item的几种模式
'''
from tkinter import *
root = Tk()
#属性 MULTIPLE 允许多选,每次点击Item,它将改变自己当前选状态,与Checkbox有点类似
lb = Listbox(root, selectmode = MULTIPLE)
for item in ['python', 'tkinter', 'widget']:
lb.insert(END, item)
lb.pack()
root.mainloop()
3.使用Listbox支持方向键移动选中位置 selectmode:设置为BROWER,默认即为这个值
#-*-coding:utf-8-*-
'''
使用Listbox支持方向键移动选中位置
selectmode:设置为BROWER,默认即为这个值
'''
from tkinter import *
root = Tk()
# selectmode设置为 SINGLE时,不支持方向键移动选中位置
lb = Listbox(root, selectmode = SINGLE)
for item in ['python', 'tkinter', 'widget']:
lb.insert(END, item)
lb.pack()
root.mainloop()
4.使Listbox支持Shift和Control selectmode:设置为EXTENDED
#-*-coding:utf-8-*-
'''
使Listbox支持Shift和Control
selectmode:设置为EXTENDED
'''
from tkinter import *
root = Tk()
lb = Listbox(root, selectmode = EXTENDED)
for item in ['python', 'tkinter', 'widget']:
lb.insert(END, item)
lb.pack()
root.mainloop()
#运行程序,点中‘python',shift + 点击'widget',会选中所有的item
#运行程序,点中'python',shift + 点击'widget',会选中python和widget,第二项tkinter处于非选中状态
5.insert:向Listbox中添加一个item
#-*-coding:utf-8-*-
'''
insert:向Listbox中添加一个item
'''
from tkinter import *
root = Tk()
lb = Listbox(root)
#先向Listbox中追加三个item,再在Listbox开始添加三个item
for item in ['python', 'tkinter', 'widget']:
lb.insert(END, item)
#只添加一个item将[]作为一个item
#lb.insert(0, ['linux', 'windows','unix'])
#添加三个item,每个string为一个item
lb.insert(0, 'linux', 'windows', 'unix')
lb.pack()
root.mainloop()
6.删除Listbox中的item delete:删除Listbox中指定的item,这个函数也有两个参数,第一个为开始的索引值; 第二个为结束的索引值,如果不指定则只删除第一个索引item
#-*-coding:utf-8-*-
'''
删除Listbox中的item
delete:删除Listbox中指定的item,这个函数也有两个参数,第一个为开始的索引值;
第二个为结束的索引值,如果不指定则只删除第一个索引item
'''
from tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END, str(i))
lb.delete(1, 3)
lb.pack()
root.mainloop()
7.选中或取消Listbox中的item select_set:函数有两个参数第一个为开始的索引; 第二个为结束的索引,如果不指定则只选中第一个参数指定的索引项
#-*-coding:utf-8-*-
'''
选中或取消Listbox中的item
select_set:函数有两个参数第一个为开始的索引;
第二个为结束的索引,如果不指定则只选中第一个参数指定的索引项
'''
from tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END, str(i))
lb.select_set(0, 9)
#lb.pack()
#root.mainloop()
'''
程序运行结果,选中了所有的项,代码并未指定Listbox为MULTIPLE或EXTENDED,
查通过select_set仍旧可以对Listbox进行操作
与之相对的便是取消选中的函数了select_clear,参数与select_set参数相同,如下代码取消索引从0-3
'''
lb.select_clear(2,4)
lb.pack()
root.mainloop()
8.得到当前Listbox中的item个数 size:得到当前Listbox中的item个数
#-*-coding:utf-8-*-
'''
得到当前Listbox中的item个数
size:得到当前Listbox中的item个数
'''
from tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END, str(i))
lb.delete(3)
print(f'current Listbox item size = {lb.size()}')
lb.pack()
root.mainloop()
9.返回指定索引的item get:此方法返回由参数指定索引的item
#-*-coding:utf-8-*-
'''
返回指定索引的item
get:此方法返回由参数指定索引的item
'''
from tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END, str(i*100))
print(lb.get(3), type(lb.get(3)))#输出 300 <class 'str'>
print(lb.get(3, 7), type(lb.get(3, 7)))#输出 ('300', '400', '500', '600', '700') <class 'tuple'>
lb.pack()
root.mainloop()
10.返回当前选中的item的索引 curselection:返回当前选中的item的索引
#-*-coding:utf-8-*-
'''
返回当前选中的item的索引
curselection:返回当前选中的item的索引
'''
from tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END, str(i * 10))
lb.selection_set(3, 8)#选中 3到8
print(lb.curselection(),type(lb.curselection()))#输出 (3, 4, 5, 6, 7, 8) <class 'tuple'>
lb.pack()
root.mainloop()
#返回索引,可以根据lb.get()得到值
11.判断一个item是否被选中 selection_includes:指定索引的item是否被选中
#-*-coding:utf-8-*-
'''
判断一个item是否被选中
selection_includes:指定索引的item是否被选中
'''
from tkinter import *
root = Tk()
lb = Listbox(root)
for i in range(10):
lb.insert(END, str(i * 100))
lb.selection_set(3, 8)
print(lb.selection_includes(8), type(lb.selection_includes)) # 输出 True <class 'method'>
print(lb.selection_includes(0))# 输出 False
lb.pack()
root.mainloop()
12.Listbox与变量绑定 listvariable:指定与Listbox绑定的变量名称
#-*-coding:utf-8-*-
'''
Listbox与变量绑定
listvariable:指定与Listbox绑定的变量名称
'''
def setListboxValue():
v.set(('1000', '200'))
from tkinter import *
root = Tk()
v = StringVar()
lb = Listbox(root, listvariable = v)
b1 = Button(root, text = 'change value', command = setListboxValue)
for i in range(10):
lb.insert(END, str(i * 100))
#打印当前列表中的item值
print(v.get())
lb.pack()
b1.pack()
root.mainloop()
点击change value按钮,Listbox值改变
13.Listbox与事件绑定 bind:将组件与某个事件绑定
#-*-coding:utf-8-*-
'''
Listbox与事件绑定
bind:将组件与某个事件绑定
'''
def printList(event):
print(lb.get(lb.curselection())) #输出当前选中项的值
from tkinter import *
root = Tk()
lb = Listbox(root)
lb.bind('<Double-Button-1>', printList)
for i in range(10):
lb.insert(END, str(i * 100))
lb.pack()
root.mainloop()