和复选按钮相对应的就是单选按钮。先看动作视频:


画面简单,代码也同样简单。首先构建字体和用于显示信息的Label控件。


 


 

# create fontftTimes = Font(family='Times', size=12, weight=BOLD)
# create Labellabel_text = StringVar()label = Label(root, textvariable=label_text)label.grid(row=2, column=0, columnspan=2, sticky=E + W)

准备一个用于管理单选结果的变量并赋初值:


 


 

# control variablerb_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​

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】