内容摘要:
Checkbutton、Radiobutton和Labelframe的基本用法
pack的anchor属性、fill属性
通过修改Radiobutton的indicatoror属性改变默认的圆形勾选框
Checkbutton多选框。
Radiobutton单选框
先感受一下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()