前言
上一篇文章我们介绍了tkinter单选框的实现,单选框的各选项之间的关系是互斥的,选择了A选项,就不能选B选项;复选框就不一样,各个选项之间是并列的,我选了A还可以选B和C选项,我们在大学选课以及我们在啊购物时选购商品就是类似的情况。
tkinter提供了Checkbutton复选框控件来帮助我们实现复选框的控制功能,本篇文章我们来介绍复选框控件的使用。
Checkbutton复选框控件
Checkbutton复选框控件基本语法如下:
Checkbutton(master=None, **options)
复选框控件,除了具有常用的共有属性之外,还具有一些其他重要属性和常用方法,下面对它们做简单地介绍:
属性 | 说明 |
---|---|
text | 显示的文本,使用 "\n" 来对文本进行换行。 |
variable | 1. 和复选框按钮关联的变量,该变量值会随着用户选择行为来改变(选或不选),即在 onvalue 和 offvalue 设置值之间切换,这些操作由系统自动完成 2. 在默认情况下,variable 选项设置为 1 表示选中状态,反之则为 0,表示不选中。 |
onvalue | 通过设置 onvalue 的值来自定义选中状态的值。 |
offvalue | 通过设置 offvalue 的值来自定义未选中状态的值。 |
indicatoron | 默认为 True,表示是否绘制用来选择的选项的小方块,当设置为 False 时,会改变原有按钮的样式,与单选按钮相同 |
selectcolor | 选择框的颜色(即小方块的颜色),默认由系统指定 |
selectimage | 设置当 Checkbutton 为选中状态的时候显示的图片,若如果没有指定 image 选项,该选项被忽略 |
textvariable | Checkbutton 显示 Tkinter 变量(通常是一个 StringVar 变量)的内容,如果变量被修改,Checkbutton 的文本会自动更新 |
wraplength | 表示复选框文本应该被分成多少行,该选项指定每行的长度,单位是屏幕单元,默认值为 0 |
示例如下:
from tkinter import *
win = Tk()
win.title("混动车型选择")
win.geometry('500x200')
win.resizable(0,0)
lb = Label(text='丰田混动车型',font=('微软雅黑', 18,'bold'),fg='#CD7054')
lb.pack()
# 新建整型变量
CheckVar1 = IntVar()
CheckVar2 = IntVar()
CheckVar3 = IntVar()
CheckVar4 = IntVar()
# 设置三个复选框控件,使用variable参数来接收变量
check1 = Checkbutton(win, text="卡罗拉",font=('微软雅黑', 15,'bold'),variable = CheckVar1,onvalue=1,offvalue=0)
check2 = Checkbutton(win, text="凯美瑞",font=('微软雅黑', 15,'bold'),variable = CheckVar2,onvalue=1,offvalue=0)
check3 = Checkbutton(win, text="亚洲龙",font=('微软雅黑', 15,'bold'),variable = CheckVar3,onvalue=1,offvalue=0)
check4 = Checkbutton(win, text="雷凌",font=('微软雅黑', 15,'bold'),variable = CheckVar4,onvalue=1,offvalue=0)
# 选择第一个为默认选项
# check1.select ()
check1.pack (side = LEFT)
check2.pack (side = LEFT)
check3.pack (side = LEFT)
check4.pack (side = LEFT)
# 定义执行函数
def study():
# 没有选择任何项目的情况下
if (CheckVar1.get() == 0 and CheckVar2.get() == 0 and CheckVar3.get() == 0 and CheckVar4.get() == 0):
s = '您还没选择任何车型'
else:
s1 = "卡罗拉" if CheckVar1.get() == 1 else ""
s2 = "凯美瑞" if CheckVar2.get() == 1 else ""
s3 = "亚洲龙" if CheckVar3.get() == 1 else ""
s4 = "雷凌" if CheckVar4.get() == 1 else ""
s = "您选择了%s %s %s" % (s1, s2, s3, s4)
#设置标签lb2的字体
lb2.config(text=s)
btn = Button(win,text="选好了",bg='#BEBEBE',command=study)
btn.pack(side = LEFT)
# 该标签,用来显示选择的文本
lb2 = Label(win,text='',bg ='#9BCD9B',font=('微软雅黑', 11,'bold'),width = 5,height=2)
lb2.pack(side = BOTTOM, fill = X)
# 显示窗口
win.mainloop()
运行程序,结果如下:
复选框控件常用方法
方法 | 属性 |
---|---|
desellect() | 取消 Checkbutton 组件的选中状态,也就是设置 variable 为 offvalue |
flash() | 刷新 Checkbutton 组件,对其进行重绘操作,即将前景色与背景色互换从而产生闪烁的效果。 |
invoke() | 1. 调用 Checkbutton 中 command 选项指定的函数或方法,并返回函数的返回值 2. 如果 Checkbutton 的state(状态)"disabled"是 (不可用)或没有指定 command 选项,则该方法无效 |
select() | 将 Checkbutton 组件设置为选中状态,也就是设置 variable 为 onvalue |
toggle() | 改变复选框的状态,如果复选框现在状态是 on,就改成 off,反之亦然 |
示例如下:
from tkinter import *
win = Tk()
win.title("混动车型选择")
win.geometry('500x200')
win.resizable(0,0)
lb = Label(text='丰田混动车型选择',font=('微软雅黑', 18,'bold'),fg='#CD7054')
lb.pack()
# 设置三个复选框控件,
check1 = Checkbutton(win, text="卡罗拉",font=('微软雅黑', 15,'bold'),onvalue=1,offvalue=0)
check2 = Checkbutton(win, text="凯美瑞",font=('微软雅黑', 15,'bold'),onvalue=1,offvalue=0)
check3 = Checkbutton(win, text="亚洲龙",font=('微软雅黑', 15,'bold'),onvalue=1,offvalue=0)
# 将第一个 复选框按钮的 variable值,设置为 onvalue =1 ,表示选中状态
check1.select ()
# 取消了第一个复选框的选中状态
check1.toggle()
check1.pack (side = LEFT)
check2.pack (side = LEFT)
check3.pack (side = LEFT)
# 显示窗口
win.mainloop()
运行脚本,结果如下:
总结
本文主要介绍了tkinter复选框的实现,复选框是我们常用的功能,在设计GUI时经常会用到,希望能够帮助大家,后续我们将介绍tkinterScale控件。