如何使用 TKinter 创建一个加载 window 的软件?
How to create a software loading window with TKinter?
如何使用 Tkinter 创建一个小软件加载 window?一个window硬加载例如7秒然后自动打开的软件,例如home.py文件
如何在 7 秒后自动打开另一个 window?谢谢
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
才能工作。这个循环创建 window,从系统获取 mouse/key 事件,将它们发送到小部件,并在 window 中重绘小部件,它一次又一次地执行。为此你需要 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()
如何使用 Tkinter 创建一个小软件加载 window?一个window硬加载例如7秒然后自动打开的软件,例如home.py文件
如何在 7 秒后自动打开另一个 window?谢谢
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
才能工作。这个循环创建 window,从系统获取 mouse/key 事件,将它们发送到小部件,并在 window 中重绘小部件,它一次又一次地执行。为此你需要 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()