Python Tkinter类对象没有属性';主回路';

Python Tkinter类对象没有属性';主回路';,python,tkinter,Python,Tkinter,我正在尝试编写一个基本程序来创建和管理任务。我遇到了一个我研究过的错误,但找不到有意义的解决方案。我使用root=tk.tk()并将其传递给一个类。但是,当我使用mainloop()方法调用该类时,我得到了这个错误,我不知道为什么会得到它: AttributeError:“MainApplication”对象没有属性“mainloop” 以下是我的代码供参考: import tkinter as tk class MainApplication: def __init__(self

我正在尝试编写一个基本程序来创建和管理任务。我遇到了一个我研究过的错误,但找不到有意义的解决方案。我使用root=tk.tk()并将其传递给一个类。但是,当我使用mainloop()方法调用该类时,我得到了这个错误,我不知道为什么会得到它:

AttributeError:“MainApplication”对象没有属性“mainloop”

以下是我的代码供参考:

 import tkinter as tk


class MainApplication:
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(self.master)
        self.entry = tk.Entry(self.frame)
        self.entryButton = tk.Button(self.frame, text="Enter", command = 'create_entry')
        self.titlelabel = tk.Label(self.frame, text="Enter a task and manage the list")
        self.entry.grid(row=1, column=0)
        self.entryButton.grid(row=1, column=1)
        self.titlelabel.grid(row=0, column=0, columnspan=2)
        self.configure_gui()

    def configure_gui(self):
        self.master.geometry("200x600")
        self.master.title("Tasklister 8000")

    def create_entry(self):
        entry = self.entry.get()
        self.newTask = tk.Button(self.frame, text=entry, command = 'delete_entry')
        self.newTask.grid(columnspan=2)

    def delete_entry(self):
        self.newTask.destroy()


def main():
    root = tk.Tk()
    app = MainApplication(root)
    app.mainloop()

if __name__ == '__main__':
    main()
如果root是一个Tkinter对象,那么我是否应该能够对我创建的类main应用程序调用mainloop()

非常感谢您对其他文献的任何帮助或指导

如果root是一个Tkinter对象,那么我是否应该能够对我创建的类main应用程序调用mainloop()

否。
root
是tkinter对象,但
app
不是。因此,您可以调用
root.mainloop()
,但不能调用
app.mainloop()


当然,你的应用程序有一堆tkinter对象(
self.master
是一个
Tk
self.frame
是一个
frame
,等等),但这并不意味着它就是一个。如果这不明显,请考虑这个代码:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
pt = Point(2, 3)
您的
pt
有一些整数,但这并不意味着它是一个整数。您不会期望
pt.bit\u length()
pt+6
float(pt)
工作,对吗


如果您看到过与您的代码类似的示例(例如,Effbot手册中充满了这些示例),那么关键的区别在于
main应用程序
tkinter.Tk
tkinter.Frame
的子类。如果这样做,那么
app
将是一个tkinter对象(一个
Tk
或一个
Frame
)。但你没有

如果root是一个Tkinter对象,那么我是否应该能够对我创建的类main应用程序调用mainloop()

否。
root
是tkinter对象,但
app
不是。因此,您可以调用
root.mainloop()
,但不能调用
app.mainloop()


当然,你的应用程序有一堆tkinter对象(
self.master
是一个
Tk
self.frame
是一个
frame
,等等),但这并不意味着它就是一个。如果这不明显,请考虑这个代码:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
pt = Point(2, 3)
您的
pt
有一些整数,但这并不意味着它是一个整数。您不会期望
pt.bit\u length()
pt+6
float(pt)
工作,对吗



如果您看到过与您的代码类似的示例(例如,Effbot手册中充满了这些示例),那么关键的区别在于
main应用程序
tkinter.Tk
tkinter.Frame
的子类。如果这样做,那么
app
将是一个tkinter对象(一个
Tk
或一个
Frame
)。但是你没有。

尝试
root.mainloop()
而不是
app.mainloop()
尝试
root.mainloop()
而不是
app.mainloop()
非常感谢!这是非常好的措辞和明确。非常感谢!这是非常好的措辞和明确。