Tkinter中如何让Python程序等待变量变更?wait_variable用法解惑
关于tkinter中
.wait_variable()方法的问题与解决 你的问题出在用了普通Python变量而非tkinter专属变量来配合wait_variable()使用——这个方法只能监听tkinter的变量对象(比如BooleanVar、StringVar、IntVar等)的变化,普通布尔/字符串/数字变量的修改不会触发它的唤醒逻辑。
看你的原代码,var = False是普通Python布尔值,调用root.wait_variable(var)时,tkinter根本没法监测这个变量的变化,所以点击Button2修改var的值后,func1里的print(2)永远不会执行。
修正后的代码
import tkinter as tk def func1(): print(1) root.wait_variable(var) print(2) def func2(): print(3) var.set(True) # 用tkinter变量的set方法修改值 print(4) root = tk.Tk() var = tk.BooleanVar(value=False) # 替换为tkinter的BooleanVar对象 button1 = tk.Button(root, text="Button 1", command=func1) button1.pack() button2 = tk.Button(root, text="Button 2", command=func2) button2.pack() root.mainloop()
效果说明
按顺序点击Button1、Button2后,输出会符合你的预期:
1 3 4 2
补充说明.wait_variable()的工作逻辑
这个方法会暂停当前函数的执行,让tkinter的事件循环继续运行(保证界面还能响应操作),直到指定的tkinter变量被set()方法修改,才会恢复执行当前函数中wait_variable()之后的代码。普通变量没有这种被tkinter事件系统监测的机制,所以无法触发唤醒。
内容的提问来源于stack exchange,提问作者duruburak
相关产品推荐
相关产品推荐

