Распечатать сообщение в текстовом виджете, который является частью класса - PullRequest
0 голосов
/ 17 апреля 2019

Я довольно новичок в объектно-ориентированном программировании. У меня есть класс с именем MessageWindow, который генерирует текстовый виджет Tkinter внутри фрейма. В своей основной функции я хочу написать сообщение в текстовый виджет, но когда я запускаю программу, я получаю: Класс MessageWindow не имеет атрибута text1

Я попробовал следовать другим ответам здесь о переполнении стека и другом учебнике в Интернете, и я всегда возвращаюсь к той же самой ошибке

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

Любая помощь будет оценена. Мне нужно понять это для более крупного проекта с графическим интерфейсом, над которым я работаю.

1 Ответ

1 голос
/ 17 апреля 2019

Хорошо, так 1. Вы ссылаетесь на MessageWindow как на свой объект класса, когда должны ссылаться на приложение, так как вы создали экземпляр класса как «приложение» в своем основном определении.2. Ваш root.mainloop () должен быть после всего вашего кода GUI, так как он не вступит в силу, если он находится после / outisde основного цикла.

Так вот как должен выглядеть код:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...