函数在标签之前被调用,但标签应该先被打印出来

问题描述

不知何故,我的 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() 启动一个新线程.