多框架Tkinter应用中倒计时时钟不更新问题排查
问题解决:Tkinter倒计时时钟不更新及报错修复
报错原因及修复要点
Line73:Statement seems to have no effect
代码里self.show_time只是引用了方法对象,没有执行调用操作,必须改成self.show_time()才能启动倒计时更新逻辑。Line108:Name 'show_time' is not defined
self.after()中直接写show_time会在全局作用域查找,但show_time是PageOne类的实例方法,必须用self.show_time来正确引用。额外问题修正:
days == 1的判断语句缩进错误,会触发语法报错,需对齐缩进。- 全局变量
myClock未被实际使用,属于冗余代码,直接删除即可。 - 按需求每500ms更新一次,需将
self.after(1000, ...)改为self.after(500, ...)。
修正后的完整代码
import tkinter as tk from tkinter import font import datetime class PageOne(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent) self.controller = controller fnt = font.Font(family='Quicksand Medium', size=30) self.txt = tk.StringVar() # 启动倒计时更新 self.show_time() lbl = tk.Label(self, textvariable=self.txt, font=fnt, foreground="black", background="#FFFFDD") lbl.pack() button = tk.Button(self, text="返回起始页", command=lambda: controller.show_frame("StartPage")) button.pack() def show_time(self): endTime = datetime.datetime(2029, 7, 20, 16, 0, 0) # 计算剩余时间 remainder = endTime - datetime.datetime.now() # 移除微秒部分 remainder = remainder - datetime.timedelta(microseconds=remainder.microseconds) yrs = remainder.days // 365 yrsTxt = ' years, ' if yrs == 1: yrsTxt = ' year, ' days = remainder.days % 365 daysTxt = ' days,' # 修复缩进错误 if days == 1: daysTxt = ' day,' timeTxt = str(remainder).split(',')[1] # 更新显示文本 self.txt.set(f"{yrs}{yrsTxt} {days}{daysTxt} {timeTxt}") # 每500ms调用一次自身,实现持续更新 self.after(500, self.show_time)
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

