tkinter 多线程

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值