import random
import time
import tkinter as tk
from threading import Thread
from tkinter import ttk
class RandomNumer(Thread):
def __init__(self):
super().__init__()
self.result = None
def run(self):
for i in range(5):
print(f"thread running ....{i+1}/5")
time.sleep(1)
print("线程结束")
self.result = random.randint(1,100)
class App:
def __init__(self,root:tk.Tk):
self.root = root
self.root.geometry("400x150")
self.root.title("Tkinter thread Example")
self.result_var = tk.StringVar()
self.label = tk.Label(master=self.root,text='resule',font=("宋体 20" ),textvariable=self.result_var)
self.label.pack(padx=10,pady=10)
self.progress_bar = ttk.Progressbar(self.root,mode='indeterminate')
self.btn = tk.Button(self.root,text='btn',command=self.handle_click)
self.btn.pack(padx=10,pady=10)
def handle_click(self):
self.btn.config(state=tk.DISABLED)
self.result_var.set("processing......")
self.progress_bar.pack(padx=10,pady=10,fill=tk.X,expand=True)
self.progress_bar.start()
self.result_var.set("processing")
thread = RandomNumer()
thread.start()
self.monitor(thread)
def monitor(self,thread):
if thread.is_alive():
self.root.after(100,lambda :self.monitor(thread))
else:
self.progress_bar.stop()
self.progress_bar.pack_forget()
self.btn.config(state=tk.NORMAL)
self.result_var.set(thread.result)
if __name__ == '__main__':
root=tk.Tk()
win = App(root)
root.mainloop()