您的位置:首页 > 编程语言 > Python开发

鱼c笔记——Python的GUI编程(五):Tkinter组件Listbox、Scrollbar和Scale

2018-02-10 11:54 1171 查看
Listbox组件,用列表框的形式显示出选项,并且支持滚动条操作。所以更适用于提供大量选项。from tkinter import *

master = Tk()

theLB = Listbox(master)
theLB.pack()

#theLB.insert(0, '') #向Listbox里添加选项,下标从零开始。最后可以用END
for item in ['张三', '李四', '王五']:
theLB.insert(END, item) #END表示最后一个。里面什么都没有时,END是0;插入一个后,END是1

'''
theLB.delete(0, END)
#删除Listbox里所有的选项。删除操作有两个参数:起始位置和结束位置
#如果只有一个参数,就指定删除参数对应的选项
'''

#添加按钮组件选中哪个按下删除哪个
theButton = Button(master, text='删除它', \
command=lambda x=theLB:x.delete(ACTIVE)) #ACTIVE表示当前选中的值
theButton.pack()

mainloop()
Listbox组件根据selectmode选项提供了四种不同的选择模式:SINGLE(单选)、BROWSE(也是单选,但是拖动鼠标或通过方向键可以直接改变选项)、MUTIPLE(多选)和EXTENDED(也是多选,但需要同时按住Shift键或Ctrl键或拖拽鼠标实现)。默认是BROWSE。

Listbox组件默认最多只能显示10个项目,如果有11个项目怎么解决?
可以通过在Listbox内滑动鼠标滚轮使最后一个现身,但这样很容易被忽略。
有两个方法可以避免:
①修改height选项。height选项是用来设置Listbox显示的行数(不是像素),其默认值是10
但是如果要显示项目过多,比如说1000个,修改height就不太合适了,因为总不能显示1000行
②可以为Listbox组件添加滚动条。

Scrollbar滚动条组件:
滚动条组件虽然是一个独立的组件,但几乎都是与其他组件一起配合使用。

为了在某个组件上安装垂直滚动条,你需要做两件事:
1.设置该组件的yscrollcommand选项为Scrollbar组件的set()方法
2.设置Scrollbar组件的command选项为该组件的yview()方法

下面是一个在Listbox里添加滚动条的例子:from tkinter import *

root = Tk()

sb = Scrollbar(root)
sb.pack(side=RIGHT, fill=Y) #把滚动条加到右边去,填充整个y轴

lb = Listbox(root, yscrollcommand=sb.set)
#在Listbox里滑动鼠标滚轮时调用set方法,同时修改滚动条的位置

for i in range(1000):
lb.insert(END, i)
lb.pack(side=LEFT, fill=BOTH)

#要与滚动条互通互连,要设置滚动条的command选项
sb.config(command=lb.yview) #config方法设置某个选项的值
#yview方法是Listbox里的默认方法,方法已经设置好怎么显示垂直滚动对应的内容变化
#拖动垂直滚动条时调用yview

mainloop()

既然说到了滚动条,就继续来说说和滚动条组件很相似的一个组件Scale组件。
Scale组件主要通过滑块来表示某个范围内的一个数字。可以设置选项范围和分辨率(分辨率指的是步长,也就是精度)from tkinter import *

#当我们希望用户输入某个范围内的数字的时候,可能会使用Entry组件,但是Entry组件并不能限制一个范围
root = Tk()

s1 = Scale(root, from_=0, to=42) #有两个参数from和to,但是from参数和Python的关键字冲突了,所以加个下横线
s1.pack()

s2 = Scale(root, from_=0, to=200, orient=HORIZONTAL) #默认Scale是垂直的,可以修改orient参数成水平的
s2.pack()

#获取滑块当前位置使用的是get方法
def show():
print(s1.get(), s2.get())

Button(root, text='获取位置', command=show).pack()

mainloop()
可以通过设置选项tickinterval和resolution改变步长和精度:from tkinter import *

root = Tk()

#tickinterval=5每5个步长显示刻度
#resolution设置每次移动多少个长度,等于5的话,每次改变只能改变5
#设置length长度,不然都堆在一起了
s1 = Scale(roo
9ac0
t, from_=0, to=42, tickinterval=5, resolution=5, length=200).pack()
s2 = Scale(root, from_=0, to=200, tickinterval=10, orient=HORIZONTAL, length=600).pack()

mainloop()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: