首页 > 解决方案 > 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(),仅此而已。对学习者有什么建议或建议吗?

编辑:该脚本实际上是一个连接到数据库的图像处理算法,我不能只是定时等待或睡眠,因为可以扩展数据库并且它可能需要比分配的时间更长的时间。

标签: pythonuser-interfacetkinter

解决方案


这些方面的东西可能对你有用。这创建了 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.")

编辑:在代码中添加了注释。


推荐阅读