《tkinter实用教程八》tkinter ttk.Checkbutton 多选框控件

本文介绍了Tkinter库中ttk.Checkbutton组件的使用,包括创建多选框、设置选中与未选中状态值、初始化变量以及事件绑定。通过示例展示了如何创建一个奶茶定制界面,以及实现两个Checkbutton互斥选择的效果,强调了command参数不是基于状态变化触发,而是点击事件触发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更多《Tkinter 实用教程》系列文章

tkinter ttk.Checkbutton 多选框

多选框 Checkbutton 是持有两种状态的特殊按钮,当点击多选框按钮时,Checkbutton 的状态会发生翻转(切换),在选中和不选中之间切换,常见于询问用户是否启用、打开某种选项。

创建一个 Checkbutton 对象

在我们买奶茶的时候,店主通常会询问是否加糖、是否加珍珠、是否加果粒等等,此时就是 Checkbutton 发挥作用的最好时机。

示例代码如下:

from tkinter import *
from tkinter import ttk

root = Tk()
main = ttk.Frame(root)
var_sugar = StringVar()
var_pearl = StringVar()
var_fruit = StringVar()
check_sugar=ttk.Checkbutton(main,text="加糖",variable=var_sugar,onvalue="加",offvalue="不加")
check_pearl= ttk.Checkbutton(main,text="加珍珠",variable=var_pearl,onvalue="加",offvalue="不加")
check_fruit=ttk.Checkbutton(main,text="加果粒",variable=var_fruit,onvalue="加",offvalue="不加")
main.grid()
check_sugar.grid(column=0,row=0)
check_pearl.grid(column=0,row=1)
check_fruit.grid(column=0,row=2)

root.mainloop()

以上代码创建了一个用于询问是否在奶茶里添加额外物品的界面,如下图所示:

tkinter checkbutton

作为一个成年人,当然是我全都要:

tkinter checkbutton

Checkbutton 多选框的值

上个代码示例,我们使用 onvalueoffvalue 指定了每个 Checkbutton 的选中值和不选中值。

实际上,Checkbutton 在不手动指定各个状态值的情况下,有一个默认值,选中为 1,不选中为 0

Checkbutton 不会初始化链接的变量,所以需要设定链接变量的初始值!!

from tkinter import *
from tkinter import ttk

root = Tk()
main = ttk.Frame(root)
var_sugar = StringVar() # 不设定值
var_pearl = StringVar()
var_pearl.set("加")
var_fruit = StringVar()
var_fruit.set("不加")
check_sugar=ttk.Checkbutton(main,text="加糖",variable=var_sugar,onvalue="yes",offvalue="no")
check_pearl= ttk.Checkbutton(main,text="加珍珠",variable=var_pearl,onvalue="加",offvalue="不加")
check_fruit=ttk.Checkbutton(main,text="加果粒",variable=var_fruit,onvalue="加",offvalue="不加")
l_sugar = ttk.Label(main,textvariable=var_sugar)
l_pearl = ttk.Label(main,textvariable=var_pearl)
l_fruit = ttk.Label(main,textvariable=var_fruit)
main.grid()
check_sugar.grid(column=0,row=0)
check_pearl.grid(column=0,row=1)
check_fruit.grid(column=0,row=2)
l_sugar.grid(column=1,row=0)
l_pearl.grid(column=1,row=1)
l_fruit.grid(column=1,row=2)

root.mainloop()

执行结果如下:

tkinter checkbutton

以上代码 var_sugar 在程序启动之初,并没有被初始化,因此,我们在使用 Checkbutton 时要初始化链接变量的值。

Checkbutton 事件绑定

使用 command 参数可以为 Checkbutton 对象绑定对应的事件,每当其状态发生改变时都会触发该事件。

示例代码如下:

from tkinter import *
from tkinter import ttk

def click():
    check['text']=var_sugar.get()

root = Tk()
main = ttk.Frame(root)
var_sugar = StringVar()

check=ttk.Checkbutton(main,text="点击事件",variable=var_sugar,onvalue="yes",offvalue="no",command=click)

main.grid()
check.grid(column=0,row=0)
root.mainloop()

当我们点击 Checkbutton 改变其状态时,让其文本发生对应的变化,效果如下:

tkinter checkbutton
tkinter checkbutton

突然有个大胆的想法!!

如果我们创建两个 Checkbutton ,当其中一个状态发生改变时,就改变另外一个的状态,形成一个循环!!!

代码如下:

from tkinter import *
from tkinter import ttk

def cmd1():
    print(1)
    if v2.get()=="选中":
        v2.set('没选中')
    else:
        v2.set("选中")
def cmd2():
    print(2)
    if v1.get()=="选中":
        v1.set('没选中')
    else:
        v1.set("选中")

root = Tk()
main = ttk.Frame(root)
v1 = StringVar()
v1.set("没选中")
v2 = StringVar()
v2.set("没选中")
c1 = ttk.Checkbutton(main,text="选择一",variable=v1,onvalue="选中",offvalue="没选中",command=cmd1)
c2 = ttk.Checkbutton(main,text="选择二",variable=v2,onvalue="选中",offvalue="没选中",command=cmd2)

main.grid()
c1.grid(column=0,row=0)
c2.grid(column=0,row=1)
root.mainloop()

执行效果如下:

tkinter checkbutton
tkinter checkbutton

由此可见 command 并不是以 Checkbutton 的状态改变作为触发事件的,应该是点击事件触发的。
在以上案例中,链接值的改变并不会触发 command!!

更多《Tkinter 实用教程》系列文章

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@魏大大

我们都没有打赏的习惯

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值