我在表格上有两个按钮,当我按下按钮时它保持按下状态,并且框架保持无响应状态,直到button1的操作完成,在我的情况下,我调用新的xterm窗口保持打开并且使用button2我想要打开新的xterm,但直到我从button1命令关闭xterm窗口,整个GUI没有响应。 这是为什么? 谢谢,我2天前开始使用TKinter,所以对我很轻松:)
答案 0 :(得分:4)
Tkinter在单个线程中工作。因此,当您按下按钮时,回调命令显然不会长时间返回。这会导致Tkinter GUI冻结,直到回调命令返回。
如果可能,解决方案是将回调命令分解为更小的部分,可能是一个循环,并经常调用update_idletasks()以允许Tkinter GUI更新。
如果不可能,则回调命令应为spawn a thread,因此其执行不会阻止Tkinter主事件循环。
答案 1 :(得分:0)
另一个对我有帮助的解决方案是运行一些
root.update()
在需要大量资源的循环/函数内部。这比'update_idletasks()'更为严格,因此请注意它是否与您的GUI设置和/或您的常规脚本结构兼容。
'root'当然是用Tkinter生成的窗口/表单的名称。 另外,请注意.update()所做的不仅仅是“刷新” GUI。