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
что приводит к разрушению функции. Итак, в следующий раз, когда вы вызываете функцию, вы фактически "вызываете" переменную.
Не используйте одно и то же имя для глобальных переменных и для функций.