2015-04-07 14 views
0

Для моей работы в лаборатории моего Университета прикладных наук мне нужно создать программу 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() 

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

Так хорошо, уже большое спасибо за помощь!

+0

Вместо того, чтобы редактировать заголовок вашего вопроса, чтобы сказать «разрешен», пожалуйста, примите ответ, нажав на галочку с левой стороны (см. [Здесь] (http://meta.stackexchange.com/questions/5234/how -does-accepting-an-answer-work/5235 # 5235) для инструкций, если вы не знаете, что я имею в виду) –

ответ

1

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

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

+0

Это решило мою проблему. Большое спасибо! – Consequat

Смежные вопросы