我对面向对象的编程还很陌生。我有一个称为MessageWindow的类,该类在Frame内生成Tkinter文本小部件。在我的主要功能中,我想向文本小部件中写入一条消息,但是当我运行该程序时,我得到:类MessageWindow没有属性text1
我尝试按照此处关于Stack Overflow的其他响应以及网络上的其他教程进行尝试,但我总是以相同的错误结束
from Tkinter import *
class MessageWindow(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.pack(fill='both', expand='yes')
self.text1 =Text(self,height=9, width=13)
self.text1.pack()
def main():
root=Tk()
root.title("MessageWindow")
app = MessageWindow(root)
root.mainloop()
MessageWindow.text1.insert(END,"This is a test Message")
MessageWindow.text1.pack()
if __name__=='__main__':
main()
任何帮助将不胜感激。对于正在处理的更大的GUI项目,我需要了解这一点。
答案 0 :(得分:1)
好吧 1.当您应引用app时,您将MessageWindow称为类对象,因为您已在主定义中将类实例化为“ app”。 2.您的root.mainloop()应该放在所有GUI代码之后,因为如果它在主循环之后/不在主循环中,则不会生效。
这就是代码的原样:
from Tkinter import *
class MessageWindow(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.pack(fill='both', expand='yes')
self.text1 = Text(self,height=9, width=13)
self.text1.pack()
def main():
root=Tk()
root.title("MessageWindow")
app = MessageWindow(root)
# Fix one
app.text1.insert(END,"This is a test Message")
app.text1.pack()
# Fix two
root.mainloop()
if __name__=='__main__':
main()