Python Tkinter不删除标签小部件
我对这一点比较陌生,但有人能找出为什么errorLabel没有忘记吗?我看不出为什么会出现这种情况。所有其他小部件都会消失,但errorLabel不会消失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
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
)跟踪对象引用,以便根据需要删除/重建它们。然而,随着当前代码的运行,您可能希望在建议适当的解决方案之前,将其重新构造。