Tkinter编程应知应会(11)-单选按钮
原创
©著作权归作者所有:来自51CTO博客作者大连木匠的原创作品,请联系作者获取转载授权,否则将追究法律责任
和复选按钮相对应的就是单选按钮。先看动作视频:
画面简单,代码也同样简单。首先构建字体和用于显示信息的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
觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】