You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tkinter Checkbutton状态获取异常,勾选未勾选均返回0如何解决?

你遇到的问题是Spyder运行环境的特性导致,代码本身逻辑没有错误,你当前使用的tk、conda、Spyder版本本身不存在兼容性问题,无需调整版本。

根本原因

Spyder默认使用IPython交互式控制台运行Tkinter程序时,未绑定到持久对象的IntVar实例会被Python的垃圾回收机制异常释放,导致Checkbutton和变量的绑定失效,因此无论是否勾选复选框,读取到的变量值永远是初始值0。

解决方法

方法1:修改变量挂载对象,避免被回收

将IntVar实例挂载到Tkinter主窗口对象上,保证变量生命周期和窗口一致,修改后的代码如下:

from tkinter import *

def click_me():
    print(root.i.get())

root = Tk()
# 将IntVar挂载到root对象上,避免被垃圾回收
root.i = IntVar()
c = Checkbutton(root, text = "Python", variable=root.i)
c.pack()

b = Button(root, text="Click here", command=click_me)
b.pack()

root.geometry("400x400+120+120")
root.mainloop()

方法2:调整运行方式

不在Spyder的IPython控制台内运行该脚本,选择以下任意一种运行方式即可:

  • 直接在系统终端中执行python 你的脚本名.py
  • 在Spyder的运行配置中,将执行方式修改为在外部系统终端中执行

验证

按上述方法调整后,勾选复选框点击按钮会输出1,取消勾选输出0,符合预期效果。

内容的提问来源于stack exchange,提问作者Harry Spratt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 16:39:02