python destroy函数_Python Tkinter,destroy top-level after函数

该博客介绍了如何避免在GUI应用中因使用time.sleep导致的界面冻结问题。通过创建一个单独的进程并在其中运行耗时函数,同时使用Tkinter的after方法定期检查任务是否完成,可以保持GUI的响应性。这种方法确保了即使在执行长时间任务时,用户仍能与界面交互。
摘要由CSDN通过智能技术生成

time.sleep(5)是在GUI有时间更新之前启动的,这就是为什么顶层只在5秒钟后出现的原因。要更正此问题,可以在time.sleep(5)之前添加window.update_idletasks(),以强制更新显示。在

但是,正如Bryan Oakley在他的回答中指出的,GUI在time.sleep(5)执行时被冻结了。我想您的最终目标不是执行time.sleep,而是一些耗时的操作。因此,如果您不想冻结GUI,但不知道执行需要多长时间,您可以在一个单独的线程中执行函数,并使用after定期检查函数是否完成:import Tkinter as tk

import time

import multiprocessing

def function():

time.sleep(5)

def button_1():

window = tk.Toplevel(master)

window.title("info")

msg = tk.Message(window, text='running...', width=200)

msg.pack()

thread = multiprocessing.Process(target=function)

thread.start()

window.after(1000, check_if_running, thread, window)

def check_if_running(thread, window):

"""Check every second if the function is finished."""

if thread.is_alive():

window.after(1000, check_if_running, thread, window)

else:

window.destroy()

master = tk.Tk()

frame = tk.Frame(width=500,height=300)

frame.grid()

button_one = tk.Button(frame, text ="Launch", command=button_1)

button_one.grid(row = 0, column = 0, sticky = "we")

master.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值