我正在研究简单的窗口,喜欢在里面有时钟。了解如何在单独的窗口中动态显示时间:
不知何故,放入我的项目中的相同代码仅显示标签的紫色背景:
def time():
string = strftime('%H:%M:%S %p')
lbl.config(text=string)
lbl.after(1000, time)
class MainWindow(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
main_frame = tk.Frame(self, height=600, width=1024)
main_frame.pack_propagate(0)
main_frame.pack(fill="both", expand="true")
main_frame.grid_rowconfigure(0, weight=1)
main_frame.grid_columnconfigure(0, weight=1)
frame1 = tk.LabelFrame(self, text="Parametry Pracy")
frame1.place(rely=0.05, relx=0.02, height=400, width=400)
pp=tk.Frame(frame1)
pp.pack(pady=2)
lbl = Label(pp, font=('arial', 20, 'bold'),bg='purple', fg='white', width=11)
lbl.grid(row=0, column=0, sticky="W", padx=20)
的代码中缺少对
time()
函数的调用。定义了该函数,但从未实际执行过它。这就是为什么的标签只显示紫色背景而没有更新时间的原因。
以下是如何修复代码的方法:
import tkinter as tk
from time import strftime
def time():
string = strftime('%H:%M:%S %p')
lbl.config(text=string)
lbl.after(1000, time)
class MainWindow(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
main_frame = tk.Frame(self, height=600, width=1024)
main_frame.pack_propagate(0)
main_frame.pack(fill="both", expand="true")
main_frame.grid_rowconfigure(0, weight=1)
main_frame.grid_columnconfigure(0, weight=1)
frame1 = tk.LabelFrame(self, text="Parametry Pracy")
frame1.place(rely=0.05, relx=0.02, height=400, width=400)
pp=tk.Frame(frame1)
pp.pack(pady=2)
global lbl # Make lbl accessible from the time function
lbl = tk.Label(pp, font=('arial', 20, 'bold'),bg='purple', fg='white', width=11)
lbl.grid(row=0, column=0, sticky="W", padx=20)
time() # Start the clock
root = MainWindow()
root.mainloop()
主要更改:
-
global lbl
: 在time()
函数中使用global lbl
使函数能够访问并修改在MainWindow
类中创建的lbl
变量。 -
time()
调用 : 在MainWindow
类的__init__
方法中添加time()
调用,以便在创建窗口后立即启动时钟。
通过这些更改,的时钟现在应该可以正常更新了。
标签:python,tkinter,tkinter-layout,tkinter-label From: 78790596