2017-01-15 4 views
0

Ich habe ein tkinter Toplevel Fenster für meine Anwendung erstellt und später im Programm zerstört, aber nach dem Zerstören des Fensters wird das Programm nicht weiter ausgeführt und wird dort selbst nichts tun. Hier ist der Code, den ich verwendet: -ein tkinter Fenster zerstören und weiter gehen

#login.py 
from tkinter import * 

class gui: 
    def __init__(self): 
     #does something 

    def login(self): 
     self.winLogin.destroy() 

    def guilogin(self): 
     self.winLogin = Toplevel() 
     btn = Button(self.winLogin,command=self.login,text='asd') 
     btn.pack() 
     self.winLogin.mainloop() 


#main.py 
import login 
from tkinter import * 

main = Tk() 
a = login.gui() 
a.guilogin() 
if True: 
    #some code and this part doesnot get executed 
    main.mainloop() 
else: 
    main.destroy() 

Ich betreibe main.py Datei und der Code erhalten geschlagen und nichts tun, vor dem, wenn ein Teil. Ich habe keine Ahnung, was falsch ist. Pls. Hilfe!

+0

Sie vergessen haben, 'btn. pack() 'um die Schaltfläche im Fenster anzuzeigen. – furas

+1

BTW: Sie sollten nur eine 'Hauptschleife()' in allen Code haben - 'main.mainloop()' - 'Toplevel' braucht keine andere' Hauptschleife() ' – furas

+0

Sie haben fast nichts in Ihrem Code so, was Sie erwarten sollte es tun? Stellen Sie mindestens 'print (" Hello World! ")' Ist einige Orte, um zu sehen, welcher Teil ausgeführt wird. – furas

Antwort

2

Wie Furas in den Kommentaren gesagt, sollten Sie nicht mainloop auf dem Toplevel nennen, stattdessen verwenden grab_set das Hauptfenster zu deaktivieren und wait_window für die Toplevel zu warten, geschlossen werden:

from tkinter import Tk, Toplevel, Button 

def login(): 
    top = Toplevel(root) 
    Button(top, text="Quit", command=top.destroy).pack() 
    top.grab_set() # deactivate the main GUI while top is opened 
    root.wait_window(top) # wait for top to be closed before doing the rest 
    print("logged in") 

root = Tk() 

Button(root, text="login", command=login).pack() 

root.mainloop()