Python Tkinter类对象没有属性“ mainloop”

时间:2018-07-19 02:54:58

标签: python tkinter

我正在尝试编写一个基本程序来创建和管理任务。我遇到了一个我研究过的错误,但找不到合适的解决方案。我使用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对象,那么我是否应该不能在我制作的类MainApplication上调用mainloop()?

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

1 个答案:

答案 0 :(得分:4)

  

如果root是Tkinter对象,那么我是否应该不能在我制作的类MainApplication上调用mainloop()?

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


当然,您的应用一堆tkinter对象(self.masterTkself.frameFrame,依此类推) ,但这并不意味着它。如果不明显,请考虑以下代码:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
pt = Point(2, 3)

您的pt 一些整数,但这并不意味着它是 。您不希望pt.bit_length()pt + 6float(pt)正常工作,对吧?


如果您看到的示例看起来与您的代码相似(例如,Effbot书中充满了这些示例),则主要区别在于使MainApplication成为tkinter.Tk或{{ 1}}。如果您这样做了,那么tkinter.Frame 成为tkinter对象(appTk)。但是你没有。