Python Tkinter不删除标签小部件

Python Tkinter不删除标签小部件,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我对这一点比较陌生,但有人能找出为什么errorLabel没有忘记吗?我看不出为什么会出现这种情况。所有其他小部件都会消失,但errorLabel不会消失 def checkLogin(root, username, password, userNameLabel, userNameEntry, passwordLabel, passwordEntry, loginButton): print(gui.checkUser(username, password)) errorLab

我对这一点比较陌生,但有人能找出为什么errorLabel没有忘记吗?我看不出为什么会出现这种情况。所有其他小部件都会消失,但errorLabel不会消失

def checkLogin(root, username, password, userNameLabel, userNameEntry, passwordLabel, passwordEntry, loginButton):
    print(gui.checkUser(username, password))
    errorLabel = Label(root, text="")
    errorLabel.pack()
    if (gui.checkUser(username, password)):
      userNameLabel.forget()
      errorLabel.forget()
      userNameEntry.forget()
      passwordLabel.forget()
      passwordEntry.forget()
      loginButton.forget()
    else:
      errorLabel.config(text="Error, that is an incorrect username and/or password")
这就是全部代码

class gui:

  def checkUser(username, password):
    data = musicQuiz.getUsers()
    for usernameDB, passwordDB in data:
      if str(usernameDB) == str(username) and str(passwordDB) == str(password):
        return True
    return False

  def checkLogin(root, username, password, userNameLabel, userNameEntry, passwordLabel, passwordEntry, loginButton):
    print(gui.checkUser(username, password))
    errorLabel = Label(root, text="")
    errorLabel.pack()
    if (gui.checkUser(username, password)):
      userNameLabel.forget()
      errorLabel.forget()
      userNameEntry.forget()
      passwordLabel.forget()
      passwordEntry.forget()
      loginButton.forget()
    else:
      errorLabel.config(text="Error, that is an incorrect username and/or password")

  def login(root):
    userNameLabel = Label(root, text="Username")
    userNameEntry = Entry(root)
    passwordLabel = Label(root, text="Password")
    passwordEntry = Entry(root)
    loginButton = Button(root, text = "Login!", command=lambda: gui.checkLogin(root, userNameEntry.get(), passwordEntry.get(), userNameLabel, userNameEntry, passwordLabel, passwordEntry, loginButton))
    userNameLabel.pack()
    userNameEntry.pack()
    passwordLabel.pack()
    passwordEntry.pack()
    loginButton.pack() 

  def main():
    musicQuiz.setupSQL()
    root = Tk()
    root.geometry("350x350")
    gui.login(root)
    root.mainloop()

if __name__ == "__main__":
  gui.main()

您是否可以尝试使用
.pack\u forget()
而不是
.forget()
?每次调用
checkLogin()
,它都会生成一个新的
错误标签。上一次调用中的任何此类标签都会保留下来,并且您无法轻松摆脱它,因为您没有对它的引用(因为
errorLabel
是一个局部变量)。除jasonharper的注释外,您还需要使用实例变量(例如
self.errorLabel
)跟踪对象引用,以便根据需要删除/重建它们。然而,随着当前代码的运行,您可能希望在建议适当的解决方案之前,将其重新构造。