Tkinter使用trace追踪变量时出现Callback未定义错误求助
Tkinter变量追踪报错
NameError: name 'callback' is not defined的解决方法 问题原因
- 函数定义顺序错误:代码中
var.trace()的执行早于callback函数的定义,Python从上到下执行代码,此时lambda里引用的callback还未被解释器识别,触发未定义错误。 - Lambda写法错误:当前lambda仅返回
callback函数对象,并未实际调用它,即使定义顺序正确,变量更新时也不会执行callback的逻辑。
修正方案
步骤1:调整函数定义顺序
将callback函数的定义移到var.trace()调用之前,确保解释器执行到trace绑定操作时,能找到该函数。
步骤2:修正回调调用逻辑
两种可选写法:
- 在lambda中调用
callback并传递trace自动传入的三个参数 - 直接将
callback函数作为trace的第二个参数(无需lambda,因为trace会自动传递参数,callback的*args可以接收)
修正后的完整代码
from tkinter import * root = Tk() # 先定义回调函数 def callback(*args): # 这里添加变量更新后的处理逻辑 print("变量值已更新") pass var = DoubleVar(root) # 写法1:用lambda调用callback并传参 var.trace("w", lambda unused0, unused1, unused2: callback(unused0, unused1, unused2)) # 写法2:直接传入callback函数(更简洁) # var.trace("w", callback) ideal_segment_size_spin = Spinbox(root, from_=0, to=100, increment=0.1, textvariable=var) ideal_segment_size_spin.pack() # 必须调用布局方法显示组件 root.mainloop()
内容的提问来源于stack exchange,提问作者Erasmo Calzadilla
相关产品推荐
相关产品推荐

