我已经阅读了所有类似的问题,但仍然不知道如何解决该错误。我正在创建一个倒数计时器,该计时器将更新并在'timeLeft'标签(下面的代码)上显示剩余时间。但是,当我尝试使用功能start_count()更新标签时,仍然会出现此错误:
self.timeLeft.config(text= str(mins) +"分"+ str(secs) +"秒")
AttributeError: 'PracticePage' object has no attribute 'timeLeft'
下面是我的代码的一部分:
class PracticePage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
timeLeft = tk.Label(self,text= "")
backButton = ttk.Button(self, text="やり直す", command = lambda: controller.show_frame(StartPage))
homeButton = ttk.Button(self, text="サインアウト", command = lambda:controller.show_frame(SignInPage))
timeLeft.pack()
backButton.pack()
homeButton.pack()
self.start_count(120)
def start_count(self,t):
global mins
global secs
time = t
while time>0:
mins, secs = divmod(time,60)
mins = round(mins)
secs = round(secs)
self.timeLeft.config(text= str(mins) +"分"+ str(secs) +"秒")
time = time-1
if (time==0):
break
有人可以帮忙吗?预先谢谢你。
答案 0 :(得分:0)
您可能误解了类属性的工作原理或self.
的确切作用。
self.
前缀用于告诉类特定的变量或函数被分配为类属性或方法。
在这里,您已经在__init__
方法中创建了一个名为timeLeft
的变量,但是稍后尝试使用self.timeLeft
访问它。由于timeLeft
仅被定义为__init__
方法的局部变量,因此无法使用。
要解决此问题,只需确保将timeLeft
更新为代码中任何位置的self.timeLeft
,然后就可以正常工作了。
更新的课程:
class PracticePage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.timeLeft = tk.Label(self,text= "")
backButton = ttk.Button(self, text="やり直す", command = lambda: controller.show_frame(StartPage))
homeButton = ttk.Button(self, text="サインアウト", command = lambda:controller.show_frame(SignInPage))
self.timeLeft.pack()
backButton.pack()
homeButton.pack()
self.start_count(120)
def start_count(self,t):
global mins
global secs
time = t
while time>0:
mins, secs = divmod(time,60)
mins = round(mins)
secs = round(secs)
self.timeLeft.config(text= str(mins) +"分"+ str(secs) +"秒")
time = time-1
if (time==0):
break