问题描述
不知何故,我的 Tkinter 代码在显示标签之前调用了该函数,但是,标签应该先出现。
def doAction():
global e
text = tk.Label(root,text="Processing.")
text.grid(row=2,columns=1)
main()
import tkinter as tk
root = tk.Tk()
root.title("App")
e = tk.Entry(root)
e.grid(row=0,column=0,padx=10,pady=10)
e.focus_set()
button = tk.Button(root,text="Go",command=doAction)
button.grid(row=0,column=3)
root.mainloop()
背后的想法是先显示“Processing”,然后让函数“main()”做它的事情。
解决方法
一旦进入main()
,就会有东西阻塞主线程,因此mainloop()
无法更新。您必须在它调用 main()
之前强制更新它。
def doAction():
.....
text.grid(row=2,columns=1)
root.update() # Now the event loop will start processing before the function ends
main()
用您在 main()
中执行的任何操作冻结 GUI 都不是一个好主意,如果它没有与 tkinter
相关的代码,您可以为 main()
启动一个新线程.