Python connexion à l'interface graphique du programme
Moi et mon ami de faire un programme qui nécessite une authentification au démarrage. Nous avons réussi à obtenir à l'utilisateur de saisir les détails, et d'avoir le programme se charge de créer un fichier texte appelé (nom d'utilisateurs) profil avec les détails. chacun est formaté comme ceci:
(Nom)
(Nom d'utilisateur)
(Mot de passe)
lorsque vous voulez vous connecter, le programme vous demande votre nom et trouve le fichier avec le nom (quoi que ils ont tapé) le profil.
si il existe, le programme ouvre une fenêtre GUI et lui demande le nom d'utilisateur et le mot de passe, et si vous mettez dans les détails corrects pour le fichier qu'il a ouvert, il est dit que les détails sont faux. Nous pensons que c'est à faire avec les variables, mais nous avons essayé beaucoup de différentes façons de l'aménager e.t.c et ne peut pas trouver le problème. Quelqu'un peut-il aider?
(Le code que j'ai compris est que la partie interface utilisateur, y compris les bits qui ne fonctionne pas, le reste est très bien.
# Log in
def LogIn():
name=input("Please enter your name: ")
file = open(name.lower() + " profile.txt", "r")
#+=========GUI===========GUI============GUI===========+
#mport modules
import tkinter
import time
#---Window---#
#make window
window = tkinter.Tk()
#change title
window.title("Python Games Login")
#change size
window.geometry("270x210")
#change window icon
window.wm_iconbitmap("Login icon.ico")
#change window colour
window.configure(bg="#39d972")
#---Commands---#
#go
def callback():
line = file.readlines()
username = user.get()
password = passw.get()
if username == line[1] and password == line[2]:
message.configure(text = "Logged in.")
else:
message.configure(text = "Username and password don't match the account \n under the name;\n \'" + name + "\'. \nPlease try again.")
#---Widgets---#
#labels
title1 = tkinter.Label(window, text="--Log in to play the Python Games--\n", bg="#39d972")
usertitle = tkinter.Label(window, text="---Username---", bg="#39d972")
passtitle = tkinter.Label(window, text="---Password---", bg="#39d972")
message = tkinter.Label(window, bg="#39d972")
#text entry windows
user = tkinter.Entry(window)
passw = tkinter.Entry(window, show='*')
#buttons
go = tkinter.Button(window, text="Log in!", command = callback, bg="#93ff00")
#pack widgets
title1.pack()
usertitle.pack()
user.pack()
passtitle.pack()
passw.pack()
go.pack()
message.pack()
#start window
window.mainloop()
#+===================GUI END=====================+
OriginalL'auteur Ben | 2014-03-08
Vous devez vous connecter pour publier un commentaire.
Avis que
readlines
n'enlève pas la fin-de-ligne de caractère(s) de l'lignes:Donc
username == line[1]
est probablement défaut depuisusername
ne comprend pas la fin-de-ligne de caractères. Et il en va de même pourpassword == line[2]
.Une solution simple serait d'utiliser
Pour plus de sécurité, vous pouvez lire et de stocker les bcrypt hachage du mot de passe plutôt que le mot de passe lui-même.
merci, cela sera utile si nous en avons besoin dans le futur, mais pour le moment, la sécurité n'est pas le problème, nous avons décidé que nous pourrions utiliser des comptes de magasin de partitions, donc rien n'est vraiment perdu, si quelqu'un décide de le pirater
OriginalL'auteur unutbu
Je voudrais utiliser python pickle module d'enregistrement des données. Il est beaucoup plus haut niveau que de simplement l'enregistrer dans un fichier texte. Dans mon exemple, j'ai décapé une liste de dictionnaires.
Une remarque à propos de pickle de les docs:
Également vérifier étagère et maréchal, ils effectuent des résultats similaires, ou d'envisager de l'enregistrer dans un fichier json (format python a json module)
Pas de problème, si vous avez des problèmes faites le moi savoir, et de Mal être gld aider
OriginalL'auteur wcb98