python json模块rodas方法_Python-Tkinter:如何使用线程防止主事件循环“冻结”

我有一个带有“开始”按钮和进度条的小型GUI测试。所需的行为是:

点击开始

进度条振荡5秒钟

进度栏停止

观察到的行为是“开始”按钮冻结5秒钟,然后显示进度条(无振荡)。

到目前为止,这是我的代码:

class GUI:

def __init__(self, master):

self.master = master

self.test_button = Button(self.master, command=self.tb_click)

self.test_button.configure(

text="Start", background="Grey",

padx=50

)

self.test_button.pack(side=TOP)

def progress(self):

self.prog_bar = ttk.Progressbar(

self.master, orient="horizontal",

length=200, mode="indeterminate"

)

self.prog_bar.pack(side=TOP)

def tb_click(self):

self.progress()

self.prog_bar.start()

# Simulate long running process

t = threading.Thread(target=time.sleep, args=(5,))

t.start()

t.join()

self.prog_bar.stop()

root = Tk()

root.title("Test Button")

main_ui = GUI(root)

root.mainloop()

根据Bryan Oakley 在此提供的信息,我了解我需要使用线程。我尝试创建一个线程,但是我猜测由于该线程是从主线程中启动的,因此没有帮助。

我有想法放置在不同的类中的逻辑部分,以及从该类,类似于由A.罗达斯示例代码内实例化GUI 这里。

我的问题:

我不知道如何编码,以便此命令:

self.test_button = Button(self.master, command=self.tb_click)

调用另一个类中的函数。这是一件坏事吗,甚至有可能吗?我将如何创建可以处理self.tb_click的第二个类?我尝试遵循A. Rodas的示例代码,该示例代码运行良好。但是我无法弄清楚在按钮小部件触发动作的情况下如何实现他的解决方案。

如果我应该从单个GUI类中处理线程,那么如何创建一个不会干扰主线程的线程?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值