2016-09-12 4 views
2

Ich mache ein behelfsmäßiges System mit Python. Derzeit, wenn Sie das richtige Passwort eingeben, öffnet sich ein neues Admin-Fenster. Wenn Sie den falschen eingeben, wird ein neues Fenster mit falschem Passwort angezeigt. Wenn Sie aus einem dieser Fenster aussteigen und dann versuchen, ein Passwort erneut einzugeben, bricht es ab. tkinter.TclError: can't invoke "wm" command: application has been destroyed Gibt es eine Möglichkeit, dies zu verhindern? Wenn jemand ein falsches Passwort eingibt, muss er die App nicht neu starten?Wie man ein Tkinter-Fenster mehrfach geöffnet lassen kann

import tkinter 
from tkinter import * 

#define root window 
root = tkinter.Tk() 
root.minsize(width=800, height = 600) 
root.maxsize(width=800, height = 600) 

#define admin window 
admin = tkinter.Tk() 
admin.minsize(width=800, height = 600) 
admin.maxsize(width=800, height = 600) 
admin.withdraw() 

#define wrong window 
wrong = tkinter.Tk() 
wrong.minsize(width=200, height = 100) 
wrong.maxsize(width=200, height = 100) 
wrong.withdraw() 
Label(wrong, text="Sorry that password is incorrect!", font=("Arial", 24), anchor=W, wraplength=180, fg="red").pack() 

#Admin sign in Label 
areAdmin = Label(root, text="Administrator sign in", font=("Arial", 18)) 
areAdmin.pack() 

#password label and password 
passwordLabel = Label(root, text="Password: ", font=("Arial", 12)) 
passwordLabel.place(x=300, y=30) 

#password entry 
adminPasswordEntry = Entry(root) 
adminPasswordEntry.place(x=385, y=32.5) 

#function for button 
def getEnteredPassword(): 
    enteredPassword = adminPasswordEntry.get() 
    if enteredPassword == password: 
     admin.deiconify() 
    else: 
     wrong.deiconify() 

#enter button for password 
passwordEnterButton = Button(root, text="Enter", width=20, command=getEnteredPassword) 
passwordEnterButton.place(x=335, y=60) 


mainloop() 

Antwort

3

Ich weiß nicht, tkinter viel, aber ich konnte den Code beheben, ich hoffe, dass es eine richtige fix ist.

  1. Erstellen Toplevel Fenster nicht Tk. das sind Dialogfenster, im Gegensatz zu Tk Fenster, das eindeutig sein muss. Gleiches Aussehen & Gefühl, gleiche Methoden
  2. Erstellen Sie Fenster bei Bedarf und jedes Mal. Sonst werden sie durch Schließen mit dem nahen Gadget zerstört.

Fest Code, geben Sie falsch oder gutes Passwort so oft wollen Sie ohne Absturz:

import tkinter 
from tkinter import * 

password="good" 

#define root window 
root = tkinter.Tk() 
root.minsize(width=800, height = 600) 
root.maxsize(width=800, height = 600) 



#Admin sign in Label 
areAdmin = Label(root, text="Administrator sign in", font=("Arial", 18)) 
areAdmin.pack() 

#password label and password 
passwordLabel = Label(root, text="Password: ", font=("Arial", 12)) 
passwordLabel.place(x=300, y=30) 

#password entry 
adminPasswordEntry = Entry(root) 
adminPasswordEntry.place(x=385, y=32.5) 

#function for button 
def getEnteredPassword(): 
    enteredPassword = adminPasswordEntry.get() 
    if enteredPassword == password: 
     admin = tkinter.Toplevel() 
     admin.minsize(width=800, height = 600) 
     admin.maxsize(width=800, height = 600) 
     #admin.withdraw() 
    else: 
     wrong = tkinter.Toplevel() 
     wrong.minsize(width=200, height = 100) 
     wrong.maxsize(width=200, height = 100) 
     Label(wrong, text="Sorry that password is incorrect!", font=("Arial", 24), anchor=W, wraplength=180, fg="red").pack() 


#enter button for password 
passwordEnterButton = Button(root, text="Enter", width=20, command=getEnteredPassword) 
passwordEnterButton.place(x=335, y=60) 


mainloop() 
+0

es ist lustig, ich begann Admin in die if-Anweisung Codierung und entschied sich dann auch nicht, ich denke, sollte ich , Danke für die Antwort. Was ist falsch = Keine und admin = Keine? – Shniper

Verwandte Themen