Tkinter Radiobutton教程
Radiobutton名称的由来是无线电的按钮,在收音机时代可以用无线电的按钮选择特定频道。选项按钮最大的特色是可以用鼠标单击方式选取此选项,同时一次只能有一个选项被选取,例如,在填写学历时,会看到一系列选项,例如,高中、大学、硕士、博士,此时只能勾选一个项目。在设计选项按钮时,最常见的方式是让选项按钮以文字方式存在,与标签一样我们也可以设计含图像的选项按钮。
程序设计时可以设计让选项按钮与函数(或称方法)绑在一起,当选择适当的选项按钮时,可以自动执行相关的函数或方法。另外,程序设计时可能会有多组选项按钮,此时可以设计一组选项按钮有一个相关的变量,用此变量绑定这组选项按钮。
这时可以使用Radiobutton( )方法建立上述系列选项按钮,语法格式如下。
Radiobutton(master, options, ...)
Radiobutton()方法的第一个参数是父对象,表示这个选项按钮将建立在哪一个父对象内。
下列是Radiobutton()方法内其他常用的options参数。
(1)activebackground
:鼠标光标在选项按钮上时的背景颜色。
(2)activeforeground
:鼠标光标在选项按钮上时的前景颜色。
(3)anchor
:如果空间大于所需时,控制选项按钮的位置,默认是CENTER。
(4)bg
:标签背景或indicator的背景颜色。
(5)bitmap
:位图图像对象。
(6)borderwidth or bd
:边界宽度默认是两个像素。
(7)command
:当用户更改选项时,会自动执行此函数。
(8)cursor
:当鼠标光标在选项按钮上时的光标形状。
(9)fg
:文字前景颜色。
(10)font
:字形。
(11)height
:选项按钮上的文字有几行,默认是1行。
(12)highlightbackground
:当选项按钮取得焦点时的背景颜色。
(13)highlightcolor
:当选项按钮取得焦点时的颜色。
(14)image
:图像对象,如果要建立含图像的选项按钮时,可以使用此参数。
(15)indicatoron
:当此值为0时,可以建立盒子选项按钮。
(16)justify
:当含多行文字时,最后一行文字的对齐方式。
(17)padx
:默认是1,可设置选项按钮与文字的间隔。
(18)pady
:默认是1,可设置选项按钮的上下间距。
(19)selectcolor
:当选项按钮被选取时的颜色。
(20)selectimage
:如果设置图像选项按钮时,可由此设置当选项按钮被选取时的不同图像。
(21)state
:默认是state=NORMAL,若是设置DISABLE则以灰阶显示选项按钮表示暂时无法使用。
(22)text
:选项按钮旁的文字。
(23)textvariable
:以变量方式显示选项按钮文字。
(24)underline
:可以设置第几个文字有下画线,从0开始算起,默认是-1,表示无下画线。
(25)value
:选项按钮的值,可以区分所选取的选项按钮。
(26)variable
:设置或取得目前选取的单选按钮,它的值类型通常是IntVar或StringVar。
(27)width
:选项按钮的文字有几个字符宽,省略时会自行调整为实际宽度。
(28)wraplength
:限制每行的文字数,默认是0,表示只有“\n”才会换行。
绑定整组选项按钮的方式如下。
var IntVar
rb1 = Radiobutton(root, ..., variable=var, value=x1, ...)
rb2 = Radiobutton(root, ..., variable=var, value=x2, ...)
...
rbn = Radiobutton(root, ..., variable=var, value=x3, ...)
未来若是想取得这组选项按钮所选的选项,可以使用get( )方法,这时会将所选选项的参数value的值传回,方法set( )可以设置最初默认的value选项。
Tkinter Radiobutton教程 示例1
这是一个简单的选项按钮的应用,程序刚执行时默认选项是“男生”,此时窗口上方显示尚未选择,然后可以选择“男生”或“女生”,选择完成后可以显示“你是男生”或“你是女生”。
from tkinter import *
def printSelection():
num = var.get()
if num == 1:
label.config(text="You are a boy")
else:
label.config(text="You are a girl")
root = Tk()
root.title("apidemos.com") # 设置窗口标题
var = IntVar() # 选项按钮绑定的变量
var.set(1) # 默认选项是男生
# var.set(0) # 可以设置初始不默认任何选项
label = Label(root,text="这是预设,尚未选择",bg="lightyellow",width=30)
label.pack()
rbman = Radiobutton(root,text="Boy", # 男生选项按钮
variable=var,value=1, # value用来区分所选择的选项按钮
command=printSelection) # 女生选项按钮
rbman.pack()
rbwoman = Radiobutton(root,text="Girl",
variable=var,value=2,
command=printSelection)
rbwoman.pack()
root.mainloop()
Output:
上述第13行是设置var变量是IntVar( )对象,也是整型。第14行是设置默认选项是1,在此相当于默认是男生,第16和17行是设置标签信息。第19~22行是创建“男生”选项按钮,第23~26行是创建“女生”选项按钮。当有单选按钮新建时,会执行第3~8行的函数,这个函数会由var.get( )获得目前选项按钮的value值,然后由此值利用if判断所选的是男生或女生,最后使用config( )方法将男生或女生设置给标签对象label的text,所以可以看到所选的结果。
上述程序中是为了让读者了解get( )和set( )方法取得和设置的var值是参数value的值,在熟悉了选项按钮的操作后,这个字段可以用字符串处理,通常是设置text内容与value内容相同,这时在处理callback函数(此例中是printSelection)时,可以比较清晰易懂,整个程序也可以比较简洁。
Tkinter Radiobutton教程 示例2
使用字符串设置Radiobutton方法内的value参数值,重新设计ch7_1.py。读者会发现printSelection( )函数只用第4行就取代了原先的第4~8行。
from tkinter import *
def printSelection():
label.config(text="You are "+var.get())
root = Tk()
root.title("apidemos.com") # 设置窗口标题
var = StringVar() # 选项按钮绑定的变量
var.set("Boy") # 默认选项是男生
# var.set("Birth") # 默认选项是空
# var.set(0) # 可以设置初始不默认任何选项
label = Label(root,text="This is a preset, not yet selected",bg="lightyellow",width=30)
label.pack()
rbman = Radiobutton(root,text="Boy-Tom", # 男生选项按钮
variable=var,value="Boy", # value用来区分所选择的选项按钮
command=printSelection) # 女生选项按钮
rbman.pack()
rbwoman = Radiobutton(root,text="Girl-Lucy",
variable=var,value="Girl",
command=printSelection)
rbwoman.pack()
root.mainloop()
Output: