python写一个线程,程序运行时弹出界面,显示程序运行了多少分多少秒时间,界面显示小丫正在努力处理数据,请稍后,提示下方做一个转圈圈进度条,界面右上角显示打叉,点击关闭程序,判断主进程标志位,标志位为1,关闭线程
时间: 2024-05-12 11:19:22 浏览: 56
以下是一个示例代码,可以实现上述功能:
```python
import threading
import time
import tkinter as tk
class MyThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.is_running = True
def run(self):
start_time = time.time()
while self.is_running:
elapsed_time = time.time() - start_time
minutes = int(elapsed_time // 60)
seconds = int(elapsed_time % 60)
progress = int(elapsed_time % 10) # 假设进度条每10秒走一次
print(f"{minutes:02}:{seconds:02} 小丫正在努力处理数据,请稍后 [{progress*'='}>{(10-progress)*'.'}]")
time.sleep(1)
def stop(self):
self.is_running = False
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.title("小丫正在努力处理数据,请稍后")
self.geometry("400x100")
self.protocol("WM_DELETE_WINDOW", self.on_close)
self.progress_var = tk.StringVar()
self.progress_var.set("=" * 10)
self.progress_label = tk.Label(self, textvariable=self.progress_var)
self.progress_label.pack(fill=tk.X, padx=10, pady=10)
self.time_var = tk.StringVar()
self.time_var.set("00:00")
self.time_label = tk.Label(self, textvariable=self.time_var, font=("Courier", 20))
self.time_label.pack(padx=10, pady=10)
self.thread = MyThread()
self.thread.start()
def on_close(self):
self.thread.stop()
self.destroy()
def update_time(self, minutes, seconds):
self.time_var.set(f"{minutes:02}:{seconds:02}")
def update_progress(self, progress):
self.progress_var.set("=" * progress + "." * (10 - progress))
app = App()
while True:
if not app.thread.is_running:
break
elapsed_time = time.time() - app.thread.start_time
minutes = int(elapsed_time // 60)
seconds = int(elapsed_time % 60)
app.update_time(minutes, seconds)
progress = int(elapsed_time % 10)
app.update_progress(progress)
app.update()
time.sleep(0.1)
app.thread.join()
```
该代码中,创建了一个 `MyThread` 类来表示工作线程。线程在运行时会不断计算时间和进度,然后打印出来。同时,主线程创建了一个 `App` 类的实例,在界面中显示时间和进度条,并启动了工作线程。主线程不断更新时间和进度条的显示,同时处理界面事件,保证界面能够正常响应。如果用户点击了关闭按钮,则主线程会调用 `MyThread` 实例的 `stop` 方法来停止工作线程,然后退出循环,等待工作线程退出后再结束程序。
阅读全文