前一篇文章介绍了checkbutton复选框。本文介绍一下radiobutton单选框。
从前文可知,checkbutton可以同时选中多个,但是radiobutton是只能在一组radiobutton中选中一个。那么radiobutton是怎样实现这种差异的呢?
我们知道,checkbutton是否选中状态值分别存储在两个属性onvalue
和offvalue
中,然后通过variable
来获取选中状态值,每个checkbutton的variable
是不同的IntVar。而,radiobutton只有value
属性(没有onvalue
和offvalue
),同组radiobutton的value
的值必须不同, variable
都指向一个关联变量。这就是radiobutton和checkbutton的主要区别。
至于其他属性和方法都大体相同的,都支持显示文字、图片,背景色,前景色,显示样式等。本文就不再赘述。
下面来看一个示例代码
from tkinter import Tk,Radiobutton,IntVar, StringVarmain_win = Tk()
main_win.title('渔道的radiobutton控件')
width = 300
height = 300
main_win.geometry(f'{width}x{height}')def select_cb():print(f'selected option is {val.get()}')# print(f'selected option is {str_val.get()}')val = IntVar()
# str_val = StringVar()rdbtn_attributes = [['apple', 'yellow', 'blue', 5, 'raised', 1, val, select_cb],['orange', 'yellow', 'blue', 5, 'raised', 2, val, select_cb],['pear', 'yellow', 'blue', 5, 'raised', 3, val, select_cb],
]# rdbtn_attributes = [
# ['apple', 'yellow', 'blue', 5, 'raised', 'apple', str_val, select_cb],
# ['orange', 'yellow', 'blue', 5, 'raised', 'orange', str_val, select_cb],
# ['pear', 'yellow', 'blue', 5, 'raised', 'pear', str_val, select_cb],
# ]for text, bg, fg, bd, relief, value, variable, command in rdbtn_attributes:Radiobutton(main_win, text=text, bg=bg, fg=fg, borderwidth=bd, relief=relief, value=value, variable=variable, command=command).pack(anchor='w')main_win.mainloop()
上述代码中被注释的部分,是使用StringVar来记录radiobutton的选中状态值。