在类的文本小部件中打印消息

时间:2019-04-16 21:24:30

标签: python-2.7 tkinter

我对面向对象的编程还很陌生。我有一个称为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项目,我需要了解这一点。

1 个答案:

答案 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()