Как закрыть родительское окно при открытии дочернего? CustomTkinter

Рейтинг: 0Ответов: 1Опубликовано: 02.02.2023

Не могу закрыть окно авторизации, которое вызывает рабочую форму. Открывшееся окно работает, все кнопки нажимаются. Окно авторизации становится просто неактивным, не работают кнопки и его нельзя закрыть даже на крестик.

Второе окно делаю в отдельном файле, а все функции и интерфейс приложения описаны в классах. Может быть в этом дело?

class Auth(ctk.CTk):
def __init__(self):
    super().__init__()
    #настройки окна
    self.geometry("350x300")
    self.title("JustLan Admin")
    self.resizable(False, False)
    self.my_font = ctk.CTkFont(family="Times New Roman", size=24)

    #плашка
    self.back_frame = ctk.CTkFrame(master=self)
    self.back_frame.pack(pady=25, padx=20, fill="both", expand=True)

    #элементы на плашке
    self.auth_button = ctk.CTkButton(master=self.back_frame, text="Войти", font=("Times New Roman", 20), width=160, height=38, command=self.login)
    self.auth_button.pack(pady=3)

#команды
def login(self):
    if (self.login_entr.get() == "root" and self.pass_entr.get() == "root"):
        self.error_label.configure(text="")
        os.system('python workspace.py')
        self.destroy()
    else:
        self.error_label.configure(text="Неверный логин или пароль")

if __name__ == "__main__":
    app = Auth()
    app.mainloop()

введите сюда описание изображения

Пробовал разное

self.destroy()
sys.exit(0)
self.master.destroy()

С использованием

self.withdraw()
os.system('python workspace.py')

все получалось как я хотел (первое окно закрылось, второе открылось), но возникала ошибка призакрытии рабочей области, точнее приложение закрывалось, но требовало остановки в pycharm

Exception in Tkinter callback Traceback (most recent call last): File "/usr/lib/python3.9/tkinter/init.py", line 1889, in call try: KeyboardInterrupt

Ответы

▲ 0

Для закрытия первого окна авторизации одновременно с закрытием рабочей области я использовал

 self.withdraw()
 os.system('python workspace.py')
 sys.exit(0)

Мое приложение состоит только из 2 окон, поэтому я не проверял как это будет работать с 3+ окнами.