python – 为什么time.sleep在打开之前暂停tkinter窗口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 为什么time.sleep在打开之前暂停tkinter窗口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2111字,纯文字阅读大概需要4分钟。
内容图文
![python – 为什么time.sleep在打开之前暂停tkinter窗口](/upload/InfoBanner/zyjiaocheng/712/cb639d398195453aa15f4ba63f854936.jpg)
我正在为体育场开发一个程序,time.sleep()在窗口打开之前暂停程序而不是我想要它.这种行为有什么解释?
import Tkinter as tk
import time
import random
root = tk.Tk()
label = tk.Label(root, text="Navigating To Seat")
label.pack(pady=10, padx=10)
rand = random.randint(6, 16)
while rand != 0:
label2 = tk.Label(root, text="Foward: " + str(rand) + "m")
label2.pack()
rand = rand - 1
time.sleep(1)
label2.pack_forget()
root.mainloop()
解决方法:
time.sleep的作用是暂停程序的执行.如果在执行mainloop()之前每次执行6-16次,每次1秒,则要求它在启动GUI之前等待6-16秒.
您可能不了解事件循环编程的工作原理.阅读一些Tkinter教程应该很好地理解这个想法.如果您想要更少的以Tkinter为中心的解释以及有关正在发生的事情的详细信息以及绕过它的不同方法的更多信息,请参阅Why your GUI app freezes.
无论如何,我想我可以猜到你想做什么,即使你的问题不清楚:你想要启动GUI,然后,每一秒,替换标签.要做到这一点,你必须等待GUI运行,而不是在它启动之前.
但是,您也不能在GUI运行时调用sleep.当程序处于睡眠状态时,GUI无法运行(同样,这就是睡眠的意思).
最简单的方法是将循环转换为一系列函数调用,每个函数调用使用after方法调度下一个函数调用以后运行一秒钟.例如:
import Tkinter as tk
import random
root = tk.Tk()
label = tk.Label(root, text="Navigating To Seat")
label.pack(pady=10, padx=10)
rand = random.randint(6, 16)
label2 = None
def add_label():
global rand
global label2
if not rand:
root.quit()
if label2:
label2.pack_forget()
label2 = tk.Label(root, text="Foward: " + str(rand) + "m")
label2.pack()
rand = rand - 1
root.after(1000, add_label)
add_label()
root.mainloop()
当您第一次调用add_label()时,它会创建初始标签,要求Tkinter在1000毫秒内再次调用add_label()并返回.因此,在您启动循环后的第二个时间,它会再次被调用,这将创建下一个标签并要求Tkinter稍后再次调用它.这一直持续到你将rand一直减少到0,此时你调用quit而不是after,结束主循环,结束程序.
您可能想要解决此计划的其他事项.例如,不是每次都要销毁和创建一个新的Widget标签,而是可以更改其文本 – 或者更简单地说,使rand成为连接到标签的IntVar,因此只需更新rand就会自动更改文本.此外,对于任何比这个程序更简单的东西,你可能想要用更干净的东西替换全局变量 – 大多数Tkinter教程向你展示如何使用第二或第三个例子的Frame子类,这给你一个方便的地方组织小部件和成员变量,如rand.
内容总结
以上是互联网集市为您收集整理的python – 为什么time.sleep在打开之前暂停tkinter窗口全部内容,希望文章能够帮你解决python – 为什么time.sleep在打开之前暂停tkinter窗口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。