Après avoir progressé dans mes cours j'ai franchi un autre barrage dans le fait qu'il y a une erreur d'attribut que je suis incapable de résoudre. J'essaie de récupérer les informations que l'utilisateur a saisies pour leurs informations d'identification de compte afin que les données puissent être comparées aux informations de la base de données et que l'utilisateur peut se voir accorder ou refuser l'accès au compte, par exemple un écran de connexion. L'erreur est:erreur d'attribut dans la récupération de texte
AttributeError: 'LogInScreen' object has no attribute 'usernameEntry'
Et le code où cela vient est:
class LogInScreen(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
description = tk.Label(self, text="Please log in to gain access to the content of this computer science program.", font=LARGE_FONT)
description.pack()
label1 = tk.Label(self, text="Enter your username:")
label1.pack()
usernameEntry = tk.Entry(self)
usernameEntry.pack()
label2 = tk.Label(self, text="Enter your password:")
label2.pack()
passwordEntry = tk.Entry(self, show="*")
passwordEntry.pack()
notRecognised=tk.Label(self, text="")
logInButton = tk.Button(self, text="Log In",
command=self.logUserIn)
logInButton.pack()
self.controller = controller
def logUserIn(self):
username = self.usernameEntry.get()
password = self.passwordEntry.get()
find_user = ("SELECT * FROM user WHERE username == ? AND password == ?")
cursor.execute(find_user,[(username),(password)])
results = cursor.fetchall()
Je ne suis pas sûr de savoir pourquoi je reçois l'erreur et j'ai demandé d'autres personnes dans ma classe pour l'aide mais je ne vais pas très loin. Je suis conscient que c'est probablement quelque chose de très simple mais je ne peux pas le résoudre moi-même. Merci pour toute aide que vous pouvez donner.
pourquoi voudriez-vous faire 'self.usernameEntry = usernameEntry'? Tout ce que vous avez à faire est d'ajouter 'self.' comme préfixe de' usernameEntry'. Il ne sert à rien de l'assigner comme vous l'avez suggéré. –
@mike Bien sûr, vous pouvez, mais c'était plus facile d'expliquer de cette façon ... – Guillaume
Je ne pense pas que dire à quelqu'un de faire quelque chose qui est considéré comme une mauvaise pratique est une bonne façon d'enseigner quelque chose. Vous dites de rendre 'usernameEntry' un attribut de classe que vous devez faire' self.usernameEntry = usernameEntry' ceci est trompeur et inexact. L'OP pensera qu'ils doivent faire cela pour tous les attributs de classe et cela va à l'encontre de la méthode de codage DRY et est une étape supplémentaire qui n'est pas nécessaire. –