Python Tkinter,销毁顶层函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python Tkinter,销毁顶层函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1737字,纯文字阅读大概需要3分钟。
内容图文
![Python Tkinter,销毁顶层函数](/upload/InfoBanner/zyjiaocheng/668/426dfcd2b4704224b174bc96fe6e58be.jpg)
我正在使用Tkinter作为GUI使用python编程一些驱动器.当我的机器运行时,我想向用户显示一个顶层窗口,其中包含一些信息,这些信息应在功能完成后自行关闭.这是我的最小示例:
from Tkinter import *
import time
def button_1():
window = Toplevel()
window.title("info")
msg = Message(window, text='running...', width=200)
msg.pack()
time.sleep(5.0)
window.destroy()
master = Tk()
frame = Frame(width=500,height=300)
frame.grid()
button_one = Button(frame, text ="Button 1", command = button_1)
button_one.grid(row = 0, column = 0, sticky = W + E)
mainloop()
主要问题是,仅在5秒钟后出现顶级窗口.有什么建议么?
谢谢!
解决方法:
time.sleep(5)是在GUI有时间更新之前启动的,这就是为什么仅在5秒结束后才显示顶层的原因.要解决此问题,您可以在time.sleep(5)之前添加window.update_idletasks()以强制更新显示.
但是,正如布莱恩·奥克利(Bryan Oakley)在其答案中指出的那样,GUI在执行time.sleep(5)时被冻结.我想您的最终目标不是执行time.sleep,而是执行一些耗时的操作.因此,如果您不希望冻结GUI但不知道执行将花费多长时间,则可以在单独的线程中执行函数,并定期使用以下命令检查函数是否完成:
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()
内容总结
以上是互联网集市为您收集整理的Python Tkinter,销毁顶层函数全部内容,希望文章能够帮你解决Python Tkinter,销毁顶层函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。