gpt4 book ai didi

python - 如何轻松避免 Tkinter 卡住?

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:22 27 4
gpt4 key购买 nike

我开发了一个简单的 Python 应用程序来做一些事情,然后我决定使用 Tkinter 添加一个简单的 GUI。

问题是,当 main 函数执行它的操作时,窗口卡住了。

我知道这是一个常见问题,我已经读到我应该使用多线程(非常复杂,因为该函数也会更新 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()

它只会执行一次刷新,我不明白为什么。

非常感谢您的帮助。

最佳答案

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()

This答案详细介绍了 mainloop 以及它如何阻止您的代码。

Here's另一种方法是在它自己的线程上启动 GUI,然后运行不同的代码。

关于python - 如何轻松避免 Tkinter 卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42422139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com