和复选按钮相对应的就是单选按钮。先看动作视频:
视频链接
画面简单,代码也同样简单。首先构建字体和用于显示信息的Label控件。
# create font
ftTimes = Font(family='Times', size=12, weight=BOLD)
# create Label
label_text = StringVar()
label = Label(root, textvariable=label_text)
label.grid(row=2, column=0, columnspan=2, sticky=E + W)
准备一个用于管理单选结果的变量并赋初值:
# control variable
rb_var = StringVar()
rb_var.set('T')
准备第一个单选按钮:
# create a Radiobutton for Teacher.
rbt = Radiobutton(root,text="Teacher",
background="#ffffa0",foreground="#ff0000",
activebackground="#a0ffa0",activeforeground="#0000ff",
variable=rb_var, value='T',
font=ftTimes, height=1)
rbt.grid(row=0, column=0, columnspan=1, sticky=W)
注意变量选项variable和value选项的用法。如果变量rb_var的值和value选项相同,则该按钮处于选中状态。
使用同样的方法,添加第二个复选框。
# create a Radiobutton for Student.
rbs = Radiobutton(root,text="Student",
background="#ffffa0",foreground="#ff0000",
activebackground="#a0ffa0",activeforeground="#0000ff",
variable=rb_var, value='S',
font=ftTimes, height=1)
rbs.grid(row=1, column=0, columnspan=1, sticky=W)
Tkinter中通过指定同一个variable选项的方式为Radiobutton分组。本例中Student和Teacher都指向同一个rb_var变量,因此为一组。
Radiobutton另外还有command选项,可以用于指定当鼠标点击控件时的处理,但是这种方式需要为每个Rediobutton指定相同的处理。有点麻烦。这里使用另外一种策略:监视变量。代码如下:
def var_changed(*args):
label_text.set(rb_var.get())
# set variable observer.
rb_var.trace_variable('w', var_changed)
当rb_var发生写操作时,会调用var_changed函数。
是不是简洁了一些?
完整代码可以从下面的链接下载:
https://github.com/xueweiguo/TkinterPrimer/blob/master/Sample/11%20RadioButton.py
觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】