Checkbutton组件
Checkbutton组件就是常见的多选按钮,而Radiobutton则是单选按钮
1 from tkinter import * 2 3 root = Tk() 4 v = IntVar() #设置一个Tkinter变量,用于表示该按钮是否被选中 5 c = Checkbutton(root,text="测试一下",variable=v) 6 c.pack() 7 8 #如果选项被选中,那么变量v被赋值为1,否则为0 9 l = Label(root,textvariable=v) #用Label标签动态展示状态 10 l.pack() 11 mainloop()
执行结果:
当单击选项时,Label显示的变量相应地发生了改变。
根据上面的基础,但是如果是多个选项时,我们就可以用for循环来显示数据,例
from tkinter import * root = Tk() gilrs = ["杨幂","唐嫣","小龙女","孙俪"] v = [] for g in gilrs: v.append(IntVar()) b = Checkbutton(root,text=g,variable=v[-1]) b.pack(anchor=W) mainloop()
执行结果:
注意哦,我这里对pack()方法的anchor选项实现了定位显示位置,让其左对齐pack(anchor=W),其可设置为N,NE,E,SE,S,SW,W,NW和CENTER九个不同的值。这就是指南针的九个不同方位,按照“上北下南左西右东”的原则,如下图
Radiobutton组件
Radiobutton组件跟Checkbutton组件的用法基本一致,唯一不同的是Radiobuttonbutton实现的是单选效果,要实现这种互斥的效果,同一组内的所有Radiobutton只能共享一个variable选项,并且需要设置不同的value选项值。
1 from tkinter import * 2 3 root = Tk() 4 v = IntVar() 5 Radiobutton(root,text="one",variable=v,value=1).pack(anchor=W) 6 Radiobutton(root,text="two",variable=v,value=2).pack(anchor=W) 7 Radiobutton(root,text="three",variable=v,value=3).pack(anchor=W) 8 Radiobutton(root,text="four",variable=v,value=4).pack(anchor=W) 9 mainloop()
执行效果:
程序中如果有多个选项,可以用循环来处理,这样代码会简洁,例如:
1 from tkinter import * 2 3 root = Tk() 4 langs = [("python",1),("perl",2),("ruby",3)] 5 v = IntVar() 6 v.set(1) 7 for lang,num in langs: 8 b = Radiobutton(root,text=lang,variable=v,value=num) 9 b.pack(anchor=W) 10 mainloop()
执行结果:
如果你不喜欢按钮前面的小圆圈,可以替换成按钮的形式
b = Radiobutton(root,text=lang,variable=v,value=num,indicatoron=False)
b.pack(fill=X)
修改后程序如图:
LabelFrame组件
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 = [("python",1),("perl",2),("ruby",3)] v = IntVar() v.set(1) for lang,num in langs: b = Radiobutton(group,text=lang,variable=v,value=num) b.pack(anchor=W) mainloop()
执行结果: