dec*_*nza 3 python user-interface tkinter
我开发了一个简单的Python应用程序,然后我决定使用Tkinter添加一个简单的GUI.
问题是,虽然主要功能正在做它的东西,窗口冻结.
我知道这是一个常见问题,我已经读过我应该使用多线程(非常复杂,因为函数也更新了GUI)或者将我的代码分成不同的函数,每个函数都工作了一段时间.无论如何,我不想为这样一个愚蠢的应用程序更改我的代码.
我的问题是:是否有可能没有简单的方法来每秒更新我的Tkinter窗口?我只想申请KISS规则!
我会在下面给你一个伪代码示例,但我没试过但是没有用:
class Gui:
[...]#costructor and other stuff
def refresh(self):
self.root.update()
self.root.after(1000,self.refresh)
def start(self):
self.refresh()
doingALotOfStuff()
#outside
GUI = Gui(Tk())
GUI.mainloop()
Run Code Online (Sandbox Code Playgroud)
它只会执行一次刷新,我无法理解为什么.
非常感谢你的帮助.
Tkinter在mainloop.这基本上意味着它不断刷新窗口,等待被点击按钮,单词被输入,运行回调,等等.当你运行在同一个线程,在某些代码mainloop是,再没有什么别的打算在执行mainloop,直到代码部分已完成.一个非常简单的解决方法是将一个长时间运行的进程生成到一个单独的线程上.这仍然可以与Tkinter通信并更新它的GUI(大部分).
这是一个简单的示例,它不会彻底修改您的伪代码:
import threading
class Gui:
[...]#costructor and other stuff
def refresh(self):
self.root.update()
self.root.after(1000,self.refresh)
def start(self):
self.refresh()
threading.Thread(target=doingALotOfStuff).start()
#outside
GUI = Gui(Tk())
GUI.mainloop()
Run Code Online (Sandbox Code Playgroud)
这个答案详细介绍mainloop了它以及如何阻止您的代码.
这是另一种方法,它继续在它自己的线程上启动GUI,然后运行不同的代码.
| 归档时间: |
|
| 查看次数: |
8665 次 |
| 最近记录: |