gpt4 book ai didi

python - 使用 Python Tk 作为线程代码的前端

转载 作者:行者123 更新时间:2023-11-30 23:51:28 25 4
gpt4 key购买 nike

我知道 Python 的 Tk 接口(interface)在使用线程时存在一些问题,而且我已经遇到过问题。我现在的想法是使用 Queue.Queue 以某种方式将事件传递到 Tk 主循环,类似于以下示例。

from Tkinter import *
import Queue
import time

# this queue will be filled by other threads
queue = Queue.Queue()
queue.put("Helloooo!")
queue.put("hi there, everyone!")

class Application(Frame):
def update(self):
while True:
try:
text = queue.get(False)
self.hi_there["text"] = text
time.sleep(3)
except Queue.Empty:
self.quit()

def create_widgets(self):
self.hi_there = Label(self)
self.hi_there["text"] = "Hello"

self.hi_there.pack({"side": "left"})

def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.create_widgets()

root = Tk()
app = Application(master=root)
app.update()
app.mainloop()

当然,我不能自己调用​​ update (这将在 UI 显示之前执行所有操作),但需要 Tk 在其主循环期间处理它。

有没有一种万无一失的方法可以用 Tk 来实现这一点,并且在某些情况下不会崩溃?或者我应该求助于 Qt 来实现这一点?

最佳答案

作为一般经验法则,GUI 应用程序永远不应该调用 sleep ,永远不应该有无限循环(事件循环除外),并且永远不应该调用“更新”。从不调用 update 的唯一异常(exception)是,只有当您真正理解为什么不应该调用 update 时才可以。

创建一个执行两件事的方法:检查队列,然后使用“after”在一段时间后调用自身。然后,在所有其他初始化完成之后,在程序开始时、启动事件循环之前调用此方法一次。

有关此类函数的工作示例,请参阅 How to create a timer using tkinter?

关于python - 使用 Python Tk 作为线程代码的前端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6828828/

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