目录
Labelframe
先感受一下 Checkbutton 的用法:
from tkinter import *
root = Tk()
v = IntVar() #需要一个tk变量,用于表示按钮是否被选中。默认情况下,未选中是0,选中是1
c = Checkbutton(root, text='测试一下', variable=v) #variable用来表示按钮的状态(是否被按下)
c.pack()
l = Label(root, textvariable=v) #为了更直观的看出选中和未选中v的表现状态,可以将其显示在Label标签里
l.pack()
mainloop()
下面是一个翻牌子的程序:
from tkinter import *
root = Tk()
GIRLS = ['西施', '貂蝉', '王昭君', '杨玉环']
v = [] #每一个按钮都需要一个存放变量的,所以这里用列表。后面用循环来添加
for girl in GIRLS:
v.append(IntVar())#每一次都需要一个整形的tk变量用于每个存放按钮的状态,再追加到列表里去
b = Checkbutton(root, text=girl, variable=v[-1]) #依次显示每个girl的名字。每一次都要拿到最后一个元素,因此是-1
b.pack(anchor=W) #所有的Checkbutton左对齐。anchor用于指定显示位置,可以设置为N W S E NW WS SE EN(东南西北英文缩写) CENTER九个不同的值
mainloop()
Radiobutton 的用法和 Checkbutton 的用法基本一致,唯一的不同是 Radiobutton 要实现单选的效果,即互斥的效果。同一组内,所有的 Radiobutton 只能共享一个 variable 这个选项,并且要设置不同的 value 的值。
from tkinter import *
root = Tk()
v = IntVar() #多个按钮只需要一个变量
#variable只能是同一个变量。value的值必须不同才能互斥
Radiobutton(root, text='one', variable=v, value=1).pack(anchor=W)
Radiobutton(root, text='two', variable=v, value=2).pack(anchor=W)
Radiobutton(root, text='three', variable=v, value=3).pack(anchor=W)
#原理是每一次点中一个按钮,会把value的值给v,给这个v说明点中了。再和其他的value值对比,都不是2,因此不显示
mainloop()
当存在多个选项的时候,使用循环会更加简洁。
from tkinter import *
root = Tk()
v = IntVar() #多个按钮只需要一个变量
LANGS = [
('Pyhton', 1),
('Perl', 2),
('Ruby', 3),
('Lua', 4)]
v = IntVar()
v.set(1)
for lang, num in LANGS:
b = Radiobutton(root, text=lang, variable=v, value=num, indicatoron=False) #改变前面的小圆点为按钮形式
b.pack(fill=X) #X是横向填充,Y是纵向填充
mainloop()
Labelframe 标签框架。实际上是 Frame 框架的进化版,从形态上来说就是添加了 Label 的 Frame。有了它,Checkbutton 和 Radiobutton 的分组就变得简单了。
from tkinter import *
root = Tk()
group = LabelFrame(root, text='最好的脚本语言是:', padx=5, pady=5)
group.pack(padx=10, pady=10)
LANGS = [
('Pyhton', 1),
('Perl', 2),
('Ruby', 3),
('Lua', 4)]
v = IntVar()
for lang, num in LANGS:
b = Radiobutton(group, text=lang, variable=v, value=num)
b.pack(anchor=W)
mainloop()
下一篇:鱼c笔记——Python 的 GUI 编程(四):Tkinter 组件 Entry