python - python Tkinter中的简单加载屏幕
问题描述
我是 Python 初学者,尤其是 tkinter。
我想制作一个简单的 python 脚本的“加载屏幕”,并在脚本结束后关闭。
但是制作一个窗口需要一个mainloop
函数,这意味着它将无限循环或等待用户交互(或者我认为),它将消除“加载”屏幕的想法。
我尝试了一些东西,但结果是 (Put Loading Screen) -> (Loading screen still have mainloop
) -> (Can't Run Script because of waiting)
我想要的详细信息是(放置加载脚本)->(运行脚本)->(脚本结束)->(加载屏幕销毁)
我在其他语言方面有很多经验,尤其是 Java,但是 java 可以声明一个框架 -> 之后运行其他东西 -> 调用 a frame.dispose()
,仅此而已。对学习者有什么建议或建议吗?
编辑:该脚本实际上是一个连接到数据库的图像处理算法,我不能只是定时等待或睡眠,因为可以扩展数据库并且它可能需要比分配的时间更长的时间。
解决方案
这些方面的东西可能对你有用。这创建了 window root
,并定义了一个函数,该函数作为它所做的最后一件事task
销毁。root
在此示例中,task
仅休眠两秒钟,但您可以将该sleep
调用替换为您想要运行的任何代码。
您将task
函数放入主循环事件队列中root.after(200, task)
。这意味着代码将首先创建root
窗口,等待 200 毫秒,然后调用task()
,它会休眠两秒钟并销毁窗口。至少对于这个示例,您需要 200 毫秒的延迟,以便主循环有足够的时间在sleep
调用停止一切之前绘制窗口(数字可能对您不同;如果窗口不能正确绘制,请增加它)。
import tkinter as tk
from time import sleep
def task():
# The window will stay open until this function call ends.
sleep(2) # Replace this with the code you want to run
root.destroy()
root = tk.Tk()
root.title("Example")
label = tk.Label(root, text="Waiting for task to finish.")
label.pack()
root.after(200, task)
root.mainloop()
print("Main loop is now over and we can do other stuff.")
编辑:在代码中添加了注释。
推荐阅读
- java - 如何从 Java 中的 JSON 字符串中删除元素?
- range - 范围算术
- azure - 我们如何创建基于 azure-disk 的持久卷声明并从 Kubernetes 的 POD 中使用它们?
- css - 只有狐狸。删除搜索字段边框
- java - Selenium Webdriver,如何修复此 NullPointer 异常?
- javascript - json.parse 触发 React / MERN 中的跨域错误
- ios - Swift 5 / Xcode 11 更新后模拟器在动画块处冻结
- swift - 在 iOS 13 中暂停/停止 AVAudioEngine 时,状态栏会暂时显示麦克风图标
- node.js - Nodejs/express api 在弹性 beantalk 上的 502 bad gateway 处失败
- javascript - GA 收集不准确的用户数