类中的Python属性错误

2024-10-01 11:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Tkinter中创建一些帧,应该定期更新。 以下是其中一个的代码:

from Tkinter import *
import time
import random

class KopfFrame:
    def __init__(self,master):
        frame = Frame(master,bg="tan")
        frame.pack(side=TOP,expand=YES, fill=BOTH)
        self.ZeitLabel = Label(frame)
        self.ZeitLabel.pack(side=RIGHT, expand=NO,ipadx=2, ipady=2)
        self.refresh()

    def refresh(self):
        self.ZeitLabel.configure(text=time.strftime("%H:%M:%S"))
        # call this function again in 5 seconds
        #print(self)
        self.after(5000, self.refresh)

root = Tk()
K = KopfFrame(root)
root.mainloop()

但是,当我运行它时,我有一个错误:

AttributeError: KopfFrame instance has no attribute 'after'

我很肯定,打电话的方式是个问题。所以,如果有人能帮我,我要么感谢你给我一个关于函数、类以及如何调用和使用它们的好教程的提示


Tags: importselfmastertimetkinterdefrootframe
1条回答
网友
1楼 · 发布于 2024-10-01 11:29:43

您正试图调用self.after()self是您的KopfFrame类的一个实例。该类没有定义这样的方法

也许你想在这里叫^{} method。您需要存储对首先传入的Frame对象的引用,然后调用上的after,该对象是:

class KopfFrame:
    def __init__(self,master):
        # make frame an attribute on self
        self.frame = Frame(master, bg="tan")
        self.frame.pack(side=TOP,expand=YES, fill=BOTH)
        self.ZeitLabel = Label(self.frame)
        self.ZeitLabel.pack(side=RIGHT, expand=NO,ipadx=2, ipady=2)
        self.refresh()

    def refresh(self):
        self.ZeitLabel.configure(text=time.strftime("%H:%M:%S"))
        # now you can reach the frame and call after on that:
        self.frame.after(5000, self.refresh)

我改变了什么:

  • KopfFrame.__init__方法中,不要使frame只成为局部的,而是使它成为self上的一个属性

  • 使用self.frame引用KopfFrame.refresh()中的帧来访问Frame.after()方法

相关问题 更多 >