Python: закрытие дочернего окна предотвращает открытие нового дочернего окна

Для работы в лаборатории моего Университета прикладных наук мне нужно создать Python-программу, которая создает дочерние окна с возможностью создания еще одной.

Пока это работает вполне нормально.

Хитрость в том, что я закрываю ребенка и пытаюсь открыть нового "внука" главного окна.

Закрытие и открытие также отлично работает на уровне первого ребенка. Я могу войти в этого ребенка, вернуться в главное меню и так далее, сколько захочу.

Вот код, над которым я сейчас работаю:

import tkinter


def Praktika():
   global Praktika
   Praktika = tkinter.Toplevel(main)
   Praktika.geometry("320x200")

   Prak1 = tkinter.Button(Praktika, text="Praktikum 1", command =Praktikum1)
   Prak1.pack()
   Haupt = tkinter.Button(Praktika, text="Hauptmenu", command = ClosePraktika)
   Haupt.pack()


def ClosePraktika():
    Praktika.destroy()

def Praktikum1():
   global Praktikum1
   Praktikum1 = tkinter.Toplevel(main)
   Praktikum1.geometry("320x200")

   Haupt = tkinter.Button(Praktikum1, text="Hauptmenu", command = ClosePraktikum1)
   Haupt.pack()

def ClosePraktikum1():
   Praktika.destroy()
   Praktikum1.destroy()

def CloseAll():
   main.quit()

main = tkinter.Tk()
main.geometry("320x200")
main.title("Fueh")
tkinter.Button(main, text="Praktika", command=Praktika).pack()
tkinter.Button(main, text="Exit", command=CloseAll).pack()
main.mainloop()

Это уже третья попытка до сих пор, и после проведенного мною исследования я начинаю думать, что работать с детьми не так просто, как я думаю.

Ну что ж, уже большое спасибо за помощь!

1 ответ

Решение

Проблема в том, что у вас есть функция с именем Praktikum1, а затем вы создаете глобальную переменную с именем Praktikum1 что приводит к разрушению функции. Итак, в следующий раз, когда вы вызываете функцию, вы фактически "вызываете" переменную.

Не используйте одно и то же имя для глобальных переменных и для функций.

Другие вопросы по тегам