首页 >后端开发 >Python教程 >如何防止 Tkinter GUI 在等待线程完成时冻结?

如何防止 Tkinter GUI 在等待线程完成时冻结?

Patricia Arquette
Patricia Arquette原创
2024-11-03 05:22:03577浏览

How to Prevent Tkinter GUI from Freezing While Waiting for a Thread to Finish?

等待线程完成时冻结/挂起 tkinter GUI

在此示例中,按下按钮时 GUI 冻结,因为主线程正在等待让 Thread(target = self.threaded_function) 创建的线程在继续之前完成。为了保持 GUI 的响应能力,避免阻塞主线程非常重要。

这里有一个替代实现,它使用队列在线程和 GUI 之间传递数据:

queue = Queue()

def threaded_function():
    while True:
        if not queue.empty():
            item = queue.get()
            print(item)
            # Do other processing here

def helloCallback():
    queue.put("asd")

m = magic()
B = tkinter.Button(top, text = "Hello", command = helloCallback)
B.pack()
top.mainloop()

# Start the thread in the background
t = threading.Thread(target = threaded_function)
t.start()

在此实现后,GUI 线程继续响应,而 threaded_function 在后台运行。队列用于在两个线程之间传递数据。当调用 helloCallback 函数时,它会向队列添加一个项目,然后由 threaded_function 检索并处理该项目。

以上是如何防止 Tkinter GUI 在等待线程完成时冻结?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn