Python 如何允许tkinter窗口多次打开

Python 如何允许tkinter窗口多次打开,python,tkinter,Python,Tkinter,我正在用python制作一个临时登录系统。目前,如果您输入正确的密码,它会弹出一个新的管理窗口。如果您输入了错误的密码,它会弹出一个显示错误密码的新窗口。如果您退出其中一个窗口,然后再次尝试输入密码,则密码将中断tkinter.TclError:无法调用“wm”命令:应用程序已被破坏是否有办法防止这种情况发生,以便如果有人输入错误的密码,他们不需要重新启动应用程序 import tkinter from tkinter import * #define root window root = t

我正在用python制作一个临时登录系统。目前,如果您输入正确的密码,它会弹出一个新的管理窗口。如果您输入了错误的密码,它会弹出一个显示错误密码的新窗口。如果您退出其中一个窗口,然后再次尝试输入密码,则密码将中断
tkinter.TclError:无法调用“wm”命令:应用程序已被破坏
是否有办法防止这种情况发生,以便如果有人输入错误的密码,他们不需要重新启动应用程序

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()

我不太清楚,但是我可以修复你的代码,我希望这是一个正确的修复

  • 创建
    Toplevel
    窗口而不是
    Tk
    。这些是对话框窗口,而不是必须唯一的
    Tk
    窗口。相同的外观和感觉,相同的方法
  • 在需要时和每次创建窗口。否则,使用close小工具关闭它们会破坏它们
  • 修正了密码,输入错误或正确的密码,您可以多次输入,而不会崩溃:

    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()
    

    有趣的是,我开始在if语句中编码admin,然后决定不太做,我想我应该这么做,谢谢你的回答。什么是错误的=None和admin=None?