Я изучаю Tkinter и пытаюсь использовать ООП подход при разработке простого графического интерфейса.
Я создаю класс, который наследуется от tkinter.Frame, а также реализует мои специфические функции.
Я пытаюсь определить tkinter.StringVar () вне функции init моего класса, и я получаю ошибку, описанную в заголовке.Теперь я знаю, что у меня должна быть переменная внутри метода init , и я заставил ее работать. Я просто хочу понять, почему она не работает, если я объявил ее как переменную класса.
Iпонимать, что tk.StringVar () должен иметь контекст tk.Tk () для возможности запуска.Так что это должно (и действительно так) компилироваться без ошибок:
root = tk.Tk()
str = tk.StringVar()
root.mainloop()
Если я напишу так, как это, то это даст упомянутую ошибку:
class myClass(tk.Frame):
def __init__(self, master):
super(myClass, self).__init__(master)
pass
str=tk.StringVar()
root = tk.Tk()
inst = myClass(root)
Так что это если бы япопробуйте написать tk.StringVar (), не создавая сначала root = tk.Tk ().Но, насколько я понимаю, контекст tk.Tk () создается до того, как я создаю экземпляр 'inst', поэтому к тому времени, когда интерпретатор входит в класс и видит, что переменная класса 'str' уже должна была запустить tk.Tk ().Очевидно, я что-то упустил.Пожалуйста, объясните мне последовательность, в которой все происходит, и почему root.Tk () не выполняется, прежде чем я попытаюсь создать переменную tk.StringVar ().Спасибо.
Редактирование: строка str = tk.StringVar () является частью тела класса и, следовательно, выполняется во время определения класса - что происходит до того, как будет создан экземпляр Tk ().Спасибо @jasonharper за ответ.