如何使用TKinter创建软件加载窗口



使用Tkinter,我如何创建一个小的软件加载窗口?一个窗口,其硬加载例如7秒,然后自动打开软件,例如home.py文件。

如何在7秒钟后自动打开另一个窗口?感谢

from tkinter import *
from tkinter import ttk
import tkinter as tk
import time
root =  Tk()
root.title("load")
root.geometry("300x300")
root.state("normal")
lbl = Label(root, text="EXAMPLE", font=("Calibri 15 bold"))
lbl(x=40, y=40)

def wait_and_go():
time.sleep(7)

tkinter(类似于Python和其他语言中的所有其他GUI(需要运行特殊的loop才能工作。这个循环创建窗口,从系统中获取鼠标/键事件,将它们发送到窗口小部件,并重新绘制窗口中的小部件,然后一次又一次地执行。你需要root.mainloop()

如果你使用sleep(),那么这个loop就不能工作,你看不到任何东西,或者它被冻结了。但是tkinter可以在7秒后使用root.after(7000, func)运行func(),这个func()应该可以执行您想要的操作。

import tkinter as tk  # PEP8: `import *` is not preferred
# --- function ---
def func():
print('Now I can run something else')
#root.destroy()

# --- main ---
root = tk.Tk()
lbl = tk.Label(root, text="EXAMPLE")
lbl.pack(padx=50, pady=50)  # padx=(50,0), pady=(50,50)
root.after(7000, func)  # function's name without `()`
root.mainloop()

您还可以使用after()反复运行功能,该功能可以更改标签中的文本和倒计时时间。

import tkinter as tk  # PEP8: `import *` is not preferred
# --- function ---
def func():
print('Now I can run something else')
root.destroy()  # close window
def update_label():
global counter  # inform function to assign new value to external/global variable

counter -= 1

lbl['text'] = f'COUNTDOWN: {counter} s'

if counter > 0:
root.after(1000, update_label)

# --- main ---
counter = 7  # this is global variable 
root = tk.Tk()
lbl = tk.Label(root, text=f'COUNTDOWN: {counter} s')
lbl.pack(padx=50, pady=50)  # padx=(50,0), pady=(50,50)
root.after(7000, func)  # function's name without `()`
root.after(1000, update_label)  # function's name without `()`
#update_label()
root.mainloop()

编辑:

ttk.Progressbar示例。

import tkinter as tk  # PEP8: `import *` is not preferred
import tkinter.ttk as ttk
# --- function ---
def func():
print('Now I can run something else')
root.destroy()  # close window

# --- main ---
root = tk.Tk()
pb = ttk.Progressbar(root, maximum=7.001)
pb.pack(padx=50, pady=50)  # padx=(50,0), pady=(50,50)
pb.start(1000)  # start and change every 1000ms
#pb.step(-1)    # move back one step (to 0) because `start()` moves automatically to `1`
root.after(7000, func)  # function's name without `()`
root.mainloop()

最新更新