@yanglt7
2018-11-16T12:12:16.000000Z
字数 2612
阅读 787
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模块作图