文章接前一篇文章:Python 学习之 Tkinter「上 」 文章来源还是来自于我的知识星球球友.Python绿色通道 GUI教程就这么多了,完全满足我们日常做小工具的需求了,如果要继续深入可以自己研究。
开始正文:
列表框控件:可以包含一个或者多个文本框。作用:在 ListBox 控件的小窗口显示项目列表
注意 selectmode 几种方式的区别:
1.BROWSE:通常,只能从列表框中选择一行。如果单击一个项目,然后拖动鼠标会跟随选中,是默认的。 2.SINGLE:和 BROWSE 的区别是你只能选择一行,不能拖动。 3.EXTENDED:通过 shift 和 control 可以使 ListBox 支持连选和多选,能拖动 4.MULTIPLE:支持连选和多选,但不能拖动
# 创建一个 listbox ,并向其中添加元素
lb = tkinter.Listbox(win, selectmode=tkinter.BROWSE)
lb.pack()
for i in ["man", "pig", "dog", "cat"]:
lb.insert(tkinter.END, i) # 按顺序依次往后添加元素
lb.insert(tkinter.ACTIVE, "chicken") # 添加到开始的位置
# 将列表元素当做一个整体添加,不常用
lb.insert(tkinter.END, ["bird", "duck"])
# 删除元素:参数 1 为开始的引用,参数 2 为结束的索引,如果不指出参数 2 ,只删除第一个索引处的内容
lb.delete(1, 2)
lb.delete(1)
# 选中 用法同删除
lb.select_set(0, 1)
# 取消选中,用法同删除
lb.select_clear(0)
print(lb.size) # 控制台返回元素个数
print(lb.get(0, 2)) # 获取元素值,用法同删除
print(lb.curselection()) # 返回当前的索引值
print(lb.selection_includes(1)) # 判断索引项是否被选中
效果图
# 绑定变量
v = tkinter.StringVar()
# SINGLE 与 BORWSE 相似,但是不支持鼠标按下后移动选中位置
lb = tkinter.Listbox(win, selectmode=tkinter.SINGLE, listvariable=v)
lb.pack()
for i in ["green", "blue", "yellow", "white"]:
lb.insert(tkinter.END, i)
print(v.get()) # 取出元组类型的数据 ('green', 'blue', 'yellow', 'white')
v.set(("one", "two", "three", "four")) # 设置元素值
# 绑定事件 鼠标双击两次,控制台输出对应的列表项的值
def show(event):
print(lb.get(lb.curselection()))
lb.bind('<Double-Button-1>', show)
效果图
# EXTENDED 通过 shift 和 control 可以使 ListBox 支持连选和多选,MULTIPLE 支持连选和多选
lb = tkinter.Listbox(win, selectmode=tkinter.MULTIPLE)
for i in ["green", "blue", "yellow", "white", "red", "black", "man","pig", "dog", "cat", "green", "blue","yellow", "white", "red", "black", "man", "pig", "dog", "cat"]:
lb.insert(tkinter.END, i)
sc = tkinter.Scrollbar(win) # 滚动条
sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)
lb.configure(yscrollcommand=sc.set) # 关联配置
sc['command']=lb.yview # 额外给属性赋值
lb.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
效果图
Scale供用户通过拖拽指示器改变变量的值,可以水平和竖直两个方向,默认竖直
scale = tkinter.Scale(win, from_=0, to=100, orient=tkinter.HORIZONTAL,tickinterval=10, length=300)
scale.set(10) # 设置初始值
scale.pack()
def show(): # 点击按钮显示对应的数值
print(scale.get())
tkinter.Button(win, text="显示", command=show).pack()
效果图
v = tkinter.StringVar()
def update():
print(v.get()) # 实时触发值的改变
# 数值范围控件 # increment 步长 默认为 1
sp = tkinter.Spinbox(win, from_=0, to=100, increment=5, textvariable=v, command=update)
# 注意 values 不要与 from_=0, to=100, increment=5 同时使用,不常用
# sp = tkinter.Spinbox(win, values=(0, 2, 4, 6, 8))
v.set(20)
print(v.get())
sp.pack()
效果图
# 菜单条
menuBar = tkinter.Menu(win)
win.config(menu=menuBar)
# 创建一个菜单选项
menu1 = tkinter.Menu(menuBar, tearoff=True)
# 给菜单选项添加内容
for i in ["C", "C++", "Java", "Python", "PHP", "JS", "C#", "Mysql", "退出"]:
if i == "退出":
menu1.add_separator() # 添加分割线
menu1.add_command(label=i, command=win.quit)
else:
menu1.add_command(label=i)
menu2 = tkinter.Menu(menuBar, tearoff=False)
for i in ["white", "black", "red", "green", "blue", "yellow", "pink"]:
menu2.add_command(label=i)
# 向菜单条中添加菜单选项
menuBar.add_cascade(label="Language", menu=menu1)
menuBar.add_cascade(label="Color", menu=menu2)
效果图
# 鼠标右键显示菜单
menuBar = tkinter.Menu(win)
menu = tkinter.Menu(menuBar, tearoff=True)
for i in ["white", "black", "red", "green", "blue", "yellow", "pink"]:
menu.add_command(label=i)
menuBar.add_cascade(label="Color", menu=menu)
def showMenu(event):
menuBar.post(event.x_root, event.y_root)
win.bind("<Button-3>", showMenu)
最后一张效果图留给大家去实现
推荐阅读
您的Python之旅
长按,识别二维码,关注公众号
公众号回复:Flask ,爬虫,数据分析,可获得电子书