为什么 .destroy() 不适用于 tkinter 中的标签?

问题描述 投票:0回答:1

我正在制作一个登录系统,当您输入不正确的密码或用户名时,它会显示“用户名或密码不正确”,然后当您将其更改为正确的密码时,它应该销毁前一个并显示新的,但相反不会破坏上一条消息,因此您可以在新消息下看到它 username or password incorrect it overlaying

这是代码:

def submit_li(usern, passw, screen):
    global users
    global login_un
    global login_suc
    login_un = tk.Label()
    login_suc= tk.Label()
    login_un.destroy()
    login_suc.destroy()
    password = str(passw)
    username = str(usern)
    global login
    login = False

    for user in users:
        if username == user[0] and password == user[1]:
            login = True

    if login:
        login_suc = tk.Label(screen, font=('Arial', 13), text=f"{username} has logged in!")
        login_suc.grid(column=0, row=3)
        login = False
    else:
        login_un = tk.Label(screen, font=('Arial', 13), text="Username or password incorrect")
        login_un.grid(column=0, row=3)

我尝试销毁它,我希望它删除以前的标签并显示新标签,输出是它显示在以前的标签上

python tkinter
1个回答
0
投票

您创建了两个带有空字符串的标签,然后在

submit_li()
的开头销毁它们。然后为登录状态创建另一个标签。因此后来的标签永远不会被破坏。

您可以简单地在函数外部创建登录状态标签并在函数内部更新它:

def submit_li(usern, passw, screen):
    global login

    password = str(passw)
    username = str(usern)

    for user in users:
        if username == user[0] and password == user[1]:
            login = True
            msg = f"{username} has logged in!"
            break
    else:
        login = False
        msg = "Username or password incorrect"

    # update the login status label
    login_status.config(text=msg)

...

# create the label for login status
login_status = tk.Label(screen, font=('Arial', 13))
login_status.grid(row=3, column=0, columnspan=2)

...
© www.soinside.com 2019 - 2024. All rights reserved.