[关闭]
@yanglt7 2018-11-16T12:12:16.000000Z 字数 2612 阅读 694

Tkinter03_Listbox & Scrollbar & Scale

Tkinter


Listbox 组件

Listbox 组件以列表的形式显示选项,并支持滚动条操作,所以对于在需要提供大量选项的情况下会更适用。

当创建一个 Listbox 组件的时候,它是空的。所以,首先要添加一行或多行文本进去。使用 insert() 方法添加文本,该方法有两个参数:第一个参数是插入的索引号,第二个参数是插入的字符串。索引号通常是项目的序号(从 0 开始)。

对于多个项目,应该使用循环。

例 14

  1. from tkinter import *
  2. master = Tk()
  3. # 创建一个空列表
  4. theLB = Listbox(master, selectmode=EXTENDED)
  5. theLB.pack()
  6. # 往列表里添加数据
  7. for item in ["鸡蛋", "鸭蛋", "鹅蛋", "李狗蛋"]:
  8. theLB.insert(END, item)
  9. theButton = Button(master, text="删除它", \
  10. command=lambda x=theLB:x.delete(ACTIVE))
  11. theButton.pack()
  12. mainloop()

此处输入图片的描述

使用 delete() 方法删除列表中的项目,最常用的操作是删除列表中的所有项目:listbox.delete(0, END)

当然也可以删除指定的项目,添加一个独立按钮来删除 ACTIVE 状态的项目,跟 END 一样,ACTIVE 是一个特殊的索引号,表示当前被选中的项目。

Listbox 组件根据 selectmode 选项提供了四种不同的选择模式:

默认的选择模式是 BROWSE。

例 15 Listbox组件默认只能显示 10 个项目,而手头上有 11 个项目。

  1. from tkinter import *
  2. root = Tk()
  3. theLB = Listbox(root, selectmode=EXTENDED)
  4. theLB.pack()
  5. for item in range(11):
  6. theLB.insert(END, item)
  7. mainloop()

此处输入图片的描述

虽然利用鼠标滚轮可以使最后一个项目出现,但是往往容易被忽略。

有两个方法解决上述问题,第一个方法是修改 height 选项:

  1. theLB = Listbox(root, selectmode=EXTENDED, height=11)

此处输入图片的描述

虽然修改 height 选项可以达到目的,但是项目太多的话不适用(列表框太长)。更灵活的方法是为 Listbox 组件添加滚动条。

Scrollbar 组件

虽然滚动条是作为独立的组件存在,不过平时它都是几乎与其他组件配合使用的。

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

例 16

  1. from tkinter import *
  2. root = Tk()
  3. sb = Scrollbar(root)
  4. sb.pack(side=RIGHT, fill=Y)
  5. lb = Listbox(root, yscrollcommand=sb.set)
  6. for i in range(1000):
  7. lb.insert(END, i)
  8. lb.pack(side=LEFT, fill=BOTH)
  9. sb.config(command=lb.yview)
  10. mainloop()

此处输入图片的描述

分析:事实上这是一个互联互通的过程。当用户操作滚动条进行滚动的时候,滚动条响应滚动并同时通过 Listbox 组件的 yview() 方法滚动列表里的内容;同样,当列表框中可视范围发生改变的时候,Listbox 组件通过调用 Scrollbar 组件的 set() 方法设置滚动条的最新位置。

Scale 组件

Scale 组件和 Scrollbar 组件类似,但是使用范围不尽相同。Scale 组件主要是通过滑块来表示某个范围内的一个数字,可以通过修改选项设置范围以及分辨率(精度)。

当希望用户输入某个范围内的一个数值,使用 Scale 组件可以很好地代替 Entry 组件。创建一个指定范围的 Scale 组件,只需指定它的 from 和 to 两个选项即可。由于 from 本身是 Python 的关键字,为了区分需要在后边紧跟一个下划线,如 from_。

例 17

  1. from tkinter import *
  2. root = Tk()
  3. Scale(root, from_=0, to=42).pack()
  4. Scale(root, from_=0, to=200, orient=HORIZONTAL).pack()
  5. mainloop()

此处输入图片的描述

使用 get() 方法可以获取当前滑块的位置:

  1. from tkinter import *
  2. root = Tk()
  3. s1 = Scale(root, from_=0, to=42)
  4. s1.pack()
  5. s2 = Scale(root, from_=0, to=200, orient=HORIZONTAL)
  6. s2.pack()
  7. def show():
  8. print(s1.get(), s2.get())
  9. Button(root, text="获取位置", command=show).pack()
  10. mainloop()

此处输入图片的描述

可以通过 resolution 选项控制分辨率(步长),通过 tickinterval 选项设置刻度:

  1. from tkinter import *
  2. root= Tk()
  3. Scale(root, from_=0, to=42, tickinterval=5, resolution=5, length=200).pack()
  4. Scale(root, from_=0, to=200, tickinterval=10, orient=HORIZONTAL, length=600).pack()
  5. mainloop()

此处输入图片的描述

摘自《零基础入门学习Python》

参考链接:

An Introduction To Tkinter
Tkinter汇总
Python GUI编程(Tkinter)
Tkinter颜色方案举例
python tkinter可以使用的颜色
tkinter学习-菜单与画布
程序设计思想与方法--第五章
用Python中的tkinter模块作图

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注