@yanglt7
2018-11-16T12:12:16.000000Z
字数 2612
阅读 694
Tkinter
Listbox 组件以列表的形式显示选项,并支持滚动条操作,所以对于在需要提供大量选项的情况下会更适用。
当创建一个 Listbox 组件的时候,它是空的。所以,首先要添加一行或多行文本进去。使用 insert() 方法添加文本,该方法有两个参数:第一个参数是插入的索引号,第二个参数是插入的字符串。索引号通常是项目的序号(从 0 开始)。
对于多个项目,应该使用循环。
例 14
from tkinter import *
master = Tk()
# 创建一个空列表
theLB = Listbox(master, selectmode=EXTENDED)
theLB.pack()
# 往列表里添加数据
for item in ["鸡蛋", "鸭蛋", "鹅蛋", "李狗蛋"]:
theLB.insert(END, item)
theButton = Button(master, text="删除它", \
command=lambda x=theLB:x.delete(ACTIVE))
theButton.pack()
mainloop()
使用 delete() 方法删除列表中的项目,最常用的操作是删除列表中的所有项目:listbox.delete(0, END)
当然也可以删除指定的项目,添加一个独立按钮来删除 ACTIVE 状态的项目,跟 END 一样,ACTIVE 是一个特殊的索引号,表示当前被选中的项目。
Listbox 组件根据 selectmode 选项提供了四种不同的选择模式:
默认的选择模式是 BROWSE。
例 15
Listbox组件默认只能显示 10 个项目,而手头上有 11 个项目。
from tkinter import *
root = Tk()
theLB = Listbox(root, selectmode=EXTENDED)
theLB.pack()
for item in range(11):
theLB.insert(END, item)
mainloop()
虽然利用鼠标滚轮可以使最后一个项目出现,但是往往容易被忽略。
有两个方法解决上述问题,第一个方法是修改 height 选项:
theLB = Listbox(root, selectmode=EXTENDED, height=11)
虽然修改 height 选项可以达到目的,但是项目太多的话不适用(列表框太长)。更灵活的方法是为 Listbox 组件添加滚动条。
虽然滚动条是作为独立的组件存在,不过平时它都是几乎与其他组件配合使用的。
为了在某个组件上安装垂直滚动条,需要两件事:
(1)设置该组件的 yscrollbarcommand 选项为 Scrollbar 组件的 set() 方法;
(2)设置 Scrollbar 组件的 command 选项为该组件的 yview() 方法。
例 16
from tkinter import *
root = Tk()
sb = Scrollbar(root)
sb.pack(side=RIGHT, fill=Y)
lb = Listbox(root, yscrollcommand=sb.set)
for i in range(1000):
lb.insert(END, i)
lb.pack(side=LEFT, fill=BOTH)
sb.config(command=lb.yview)
mainloop()
分析:事实上这是一个互联互通的过程。当用户操作滚动条进行滚动的时候,滚动条响应滚动并同时通过 Listbox 组件的 yview() 方法滚动列表里的内容;同样,当列表框中可视范围发生改变的时候,Listbox 组件通过调用 Scrollbar 组件的 set() 方法设置滚动条的最新位置。
Scale 组件和 Scrollbar 组件类似,但是使用范围不尽相同。Scale 组件主要是通过滑块来表示某个范围内的一个数字,可以通过修改选项设置范围以及分辨率(精度)。
当希望用户输入某个范围内的一个数值,使用 Scale 组件可以很好地代替 Entry 组件。创建一个指定范围的 Scale 组件,只需指定它的 from 和 to 两个选项即可。由于 from 本身是 Python 的关键字,为了区分需要在后边紧跟一个下划线,如 from_。
例 17
from tkinter import *
root = Tk()
Scale(root, from_=0, to=42).pack()
Scale(root, from_=0, to=200, orient=HORIZONTAL).pack()
mainloop()
使用 get() 方法可以获取当前滑块的位置:
from tkinter import *
root = Tk()
s1 = Scale(root, from_=0, to=42)
s1.pack()
s2 = Scale(root, from_=0, to=200, orient=HORIZONTAL)
s2.pack()
def show():
print(s1.get(), s2.get())
Button(root, text="获取位置", command=show).pack()
mainloop()
可以通过 resolution 选项控制分辨率(步长),通过 tickinterval 选项设置刻度:
from tkinter import *
root= Tk()
Scale(root, from_=0, to=42, tickinterval=5, resolution=5, length=200).pack()
Scale(root, from_=0, to=200, tickinterval=10, orient=HORIZONTAL, length=600).pack()
mainloop()
摘自《零基础入门学习Python》
参考链接:
An Introduction To Tkinter
Tkinter汇总
Python GUI编程(Tkinter)
Tkinter颜色方案举例
python tkinter可以使用的颜色
tkinter学习-菜单与画布
程序设计思想与方法--第五章
用Python中的tkinter模块作图