在python Tkinter中简单加载屏幕

时间:2018-06-12 11:00:01

标签: python user-interface tkinter

我是初学蟒蛇学习者,特别是tkinter。

我想制作一个简单python脚本的“加载屏幕”,并在脚本结束后关闭。

但是创建一个窗口需要一个mainloop函数,这意味着它将无限循环或等待用户交互(或者我认为),它将消除“加载”屏幕的想法。

我尝试了一些东西,但最终得到了(放入载入画面) - > (加载屏幕仍有mainloop) - > (因等待而无法运行脚本)

我想要的是(放置加载脚本) - > (运行脚本) - > (脚本结束) - > (载入画面销毁)

我在其他语言尤其是Java方面有很多经验,但java只能声明一个框架 - >之后运行其他东西 - >拨打frame.dispose()即可。对学习者的任何提示或建议?

  

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

1 个答案:

答案 0 :(得分:2)

这些方面的东西可能适合你。这将创建窗口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.")

编辑:在代码中添加了评论。