python - python tkinter接近停止循环线程
问题描述
python3.5
我需要一个 GUI 和一个线程来处理繁重的计算。线程输出一些状态信息取决于计算结果。现在我尝试下面的代码似乎工作正常。但是当我按下窗口的关闭(x)按钮时,gui会冻结。
import tkinter as tk
import threading
import time
import tkinter.scrolledtext as scrolledtext
class GUI:
def __init__(self, master):
self.master = master
self.scrolledtext = scrolledtext.ScrolledText()
self.scrolledtext['font'] = ('consolas', '12')
self.scrolledtext.pack(expand=True, fill='both')
self.scrolledtext.insert(tk.END, "test\n")
self.master.protocol("WM_DELETE_WINDOW", self.closeme)
self.threadTask = ThreadedTask(self.scrolledtext)
self.threadTask.start()
def closeme(self):
self.threadTask.stop()
self.threadTask.join()
self.master.destroy()
class ThreadedTask(threading.Thread):
def __init__(self,scrolledtext):
threading.Thread.__init__(self)
self.scrolledtext = scrolledtext
self._stop_event = threading.Event()
def stop(self):
self._stop_event.set()
def run(self):
while(not self._stop_event.is_set()):
time.sleep(1)
# to do: something heavy computation....
self.scrolledtext.insert(tk.END, "123\n")
self._stop_event.wait(1)
root = tk.Tk()
root.title("Test")
main_ui = GUI(root)
root.mainloop()
解决方案
我改变了关闭功能。现在试试,在我的 debian 上它可以工作。
def closeme(self):
if self.threadTask.is_alive():
self.scrolledtext.insert(tk.END, "I', stopping\npress close again")
self.threadTask.stop()
#self.threadTask.join()
else:
self.master.destroy()
推荐阅读
- regex - GA 视图过滤器(搜索和替换)中的 REGEX 从 URI 输出数字 ID
- c# - aspnet core 停止后台运行任务
- java - Spring boot hibernate没有正在进行的事务
- node.js - 尝试使用 nodeJs 连接到 mongodb Atlas
- azure - Microsoft_Azure_BotService 资源/BotSettings/BotSettingsBlade 41 BotSettingsBlade:无法获取连接设置_errorData:未定义
- linux - getpnam、getpwnam 等中的“nam”代表什么?
- azure - 如何为 Azure KeyVaultManagementClient 异步调用指定超时?
- javascript - 如何在laravel中制作可变参数url
- python - 如何在 ML 头脑中处理这个问题?
- f# - 如何使用异步转换功能进行 Seq.collect?