gpt4 book ai didi

关闭时出现 tkinter 和线程错误的 Python 应用程序

转载 作者:行者123 更新时间:2023-11-28 18:34:59 25 4
gpt4 key购买 nike

我正在为项目作业编写此软件,但我在混合线程和 tkinter 时遇到了麻烦。以下部分大部分按预期工作,但当我关闭它时(在 Python shell 中启动它之后),Windows 显示错误:“Python 停止工作”。

import threading
import time
import tkinter
import tkinter.ttk

class BTClient:
def __init__(self, master):
self.root = master
self.root.bind("<Destroy>", self.on_destroy)

self.t = threading.Thread(target=self.update)
self.running = False

def on_destroy(self, event):
self.running = False

def run_thread(self):
self.running = True
self.t.start()

def update(self):
while self.running:
print("Update.")
time.sleep(1)

def main(args):
root = tkinter.Tk()
client = BTClient(root)
client.run_thread()
root.mainloop()

if __name__ == "__main__":
import sys
main(sys.argv)

我该如何解决这个问题?是我使用的设计造成的吗?我应该改变它吗?

编辑 1: 当我删除 __init__ 中的 self.root 声明并仅使用 master 引用时问题已解决,但我需要引用 GUI 对象,首先要构建 GUI 并从中获取输入,所以我不知道如何解决。也许将对象作为参数传递给可能需要它们的所有对象?

最佳答案

如果没有看到您的实际代码,很难确切地知道发生了什么,但是我会让您的线程方法成为 BTClient 之外的一个函数,并将线程移到客户端之外,并在mainloop 让你的线程在 BTClient 被 GC 删除之前完成清理

def update():
import time
while thread._keep_alive:
time.sleep(1)
print("thread running")

thread = threading.Thread(target=update)
thread._keep_alive = True
thread.start()

最后

thread._keep_alive = False
thread.join()

关于关闭时出现 tkinter 和线程错误的 Python 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33446579/

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