GUI的最终选择 Tkinter(三):Checkbutton组件和Radiobutton组件、LabelFrame组件

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()

执行结果:

猜你喜欢

转载自www.cnblogs.com/pinpin/p/9948925.html