self.master = master
не является обязательным для наследования от классов tkinter. Это избыточно в этом случае. Также вам не нужен мастер в супер. Просто сделайте super().__init__()
, здесь будет работать.
Вы не должны использовать диспетчер геометрии внутри фрейма, чтобы поместить себя в родительский контейнер. Вместо этого назовите это снаружи класса. Скажем, вам нужно изменить его с pack()
на grid()
, вам нужно изменить его в классе, а не просто обновить его размещение в основном коде.
Ваш основной цикл должен ссылаться на корневой экземпляр.
Я бы передал все начальные параметры при создании кнопки. Это просто добавление дополнительных строк кода для обновления каждого параметра в отдельности.
И последнее. Если вы собираетесь редактировать переменную / виджет позже в своем коде, используйте префикс self.
, чтобы сделать его атрибутом класса, но если нет, то нет смысла использовать self.
, поэтому мы можем удалить их из кнопок.
Переработанный код:
import tkinter as tk
class Application(tk.Frame):
def __init__(self):
super().__init__()
tk.Button(self, text="Hello World\n(click me)", command=self.say_hi).pack(side="top")
tk.Button(self, text="QUIT", fg="red", command=self.master.destroy).pack(side="bottom")
def say_hi(self):
print("hi there, everyone!")
def main():
root = tk.Tk()
Application().pack()
# app = MaxiTeam(root) # not sure what this is unless you meant Application?
root.mainloop()
if __name__ == '__main__':
main()