我正在编写一个基本的程序来创建和管理任务。我遇到了一个错误,我已经研究过了,但找不到一个有意义的解决方案。我使用root = tk.Tk()并将其传递给一个类。然而,当我用this循环()方法调用这个类时,我会得到这个错误,我不知道为什么要得到它:
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()如果根是Tkinter对象,那么我难道不能在我创建的类MainApplication上调用mainloop()吗?
非常感谢对其他文献的任何帮助,甚至任何方向!
发布于 2018-07-19 03:06:36
如果根是Tkinter对象,那么我难道不能在我创建的类MainApplication上调用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_length()、pt + 6或float(pt)能工作,对吧?
如果您已经看到类似于您的代码的例子(例如,Effbot书中充满了它们),那么关键的区别在于使MainApplication成为tkinter.Tk或tkinter.Frame的子类。如果这样做,那么app将是一个tkinter对象( Tk或Frame)。但你没有。
https://stackoverflow.com/questions/51413663
复制相似问题