Как правильно вызвать класс нового окна графического интерфейса?
При запуске программы всплывает сразу два окна. Графический интерфейс - tkinter.

Второе окно должно появляться при нажатии на кнопку добавить.
Вот часть кода: Первый файл:
class TransportApp:
def __init__(self, master):
self.master = master
master.title('Грузовой транспорт')
master.geometry('780x280')
# Создание графического интерфейса
self.create_widgets()
# Главная страница
def create_widgets(self):
create_label(self.master, "ГЛАВНОЕ МЕНЮ", 1, 1, 2)
create_button(self.master, "Добавить грузовой транспорт", 2, 1, AddWindow().add_win)
......Попытка вызвать класс - последняя строка выше.
if __name__ == "__main__":
root = Tk()
app = TransportApp(root)
root.mainloop()
Второй файл:
class AddWindow:
def __init__(self):
self.add_window = Tk()
self.add_window.title("Добавить грузовой транспорт")
self.add_window.geometry("400x300")
def add_win(self):
create_label(self.add_window, "Название", 1, 1)
self.ent1 = create_entry(self.add_window, 1, 2)
create_label(self.add_window, "Грузоподъемность, тонн", 2, 1)
self.ent2 = create_entry(self.add_window, 2, 2)
Ответы (1 шт):
Автор решения: Сергей Кох
→ Ссылка
В основном окне создайте метод добавление нового окна, тогда он будет вызываться после нажатия кнопки, а не во время её создания.
import tkinter as tk
class AddWindow(tk.Toplevel):
def __init__(self, master):
super().__init__(master)
self.title("Добавить грузовой транспорт")
self.geometry("400x300")
class TransportApp(tk.Tk):
def __init__(self):
super().__init__()
self.title('Грузовой транспорт')
self.geometry('780x280')
# Создание графического интерфейса
self.create_widgets()
# Главная страница
def create_widgets(self):
self.create_button = tk.Button(self.master, text="Добавить грузовой транспорт", command=self.add_window)
self.create_button.pack()
def add_window(self):
window = AddWindow(self)
window.grab_set()
if __name__ == "__main__":
app = TransportApp()
app.mainloop()