Tkinter虚拟事件绑定即触发?ZMQ监听线程发虚拟事件异常如何解决
问题成因
- 核心问题出在事件绑定的代码行:
root.bind("<<Foo>>", doShow()) bind方法要求第二个参数传入回调函数的引用,但你给doShow加了括号,相当于代码执行到绑定这一行时就会立刻调用doShow函数,将函数的返回值(也就是FuncAnimation实例)作为回调参数传入,所以才会出现程序刚启动就触发动画的问题,和zmq监听线程的逻辑完全无关。
修复方案
第一步:修正事件绑定代码
把绑定行的括号去掉,直接传入函数名即可:
root.bind("<<Foo>>", doShow)
修改后只有当<<Foo>>虚拟事件被实际触发时,才会调用doShow函数执行动画启动逻辑。
第二步:补充动画实例引用(可选但必要)
FuncAnimation实例如果没有被持续引用,会被Python垃圾回收机制销毁,导致动画无法正常运行。你可以把anim设为全局变量保留引用:
anim = None def doShow(*args): global anim anim = FuncAnimation(fig, showGraph, 300) print("Animation started")
内容的提问来源于stack exchange,提问作者HermDP
相关产品推荐
相关产品推荐

