2017-01-11 4 views
-1

Я создаю систему входа в систему на python с помощью Tkinter и смог записать в текстовый файл с именем пользователя и паролем в моем окне регистрации. Тем не менее, внутри моего окна входа в систему я не уверен, как проверить правильность ввода имени пользователя или пароля или нет?Проверка имени пользователя и пароля для python (Tkinter)

#Register window code 
    self.newNameEntry = Entry(self.master, 
        highlightcolor="grey", 
        highlightthickness=2, 
        highlightbackground="#FF4500") 

    self.newNameEntry.place(x=245, y=100) 

    self.newPasswordEntry = Entry(self.master, 
        highlightcolor="grey", 
        highlightthickness=2, 
        highlightbackground="#FF4500") 

    self.newPasswordEntry.place(x=245, y=140) 
def signUp(self): 
    text = self.newNameEntry.get() + " " + self.newPasswordEntry.get() + "\n" 
    with open("LoginDetails.txt", 'a')as f: 
     f.write(text) 
#Login window code 
    self.nameEntry = Entry(self.master, 
        highlightcolor="grey", 
        highlightthickness=2, 
        highlightbackground="#FF4500") 

    self.nameEntry.place(x=245, y=100) 

    self.passwordEntry = Entry(self.master, 
        highlightcolor="grey", 
        highlightthickness=2, 
        highlightbackground="#FF4500") 
    self.loginBtn = Button(self.master, 
        text="Login", 
        fg="white", 
        bg="#282828", 
        command = self.openHubWindow)#calls the function 
    self.loginBtn.place(x=298, y=192) 
    self.passwordEntry.place(x=245, y=140) 
def openHubWindow(self): #Where I want the login checks to happen 
      self.master.withdraw() 
      root2 = Toplevel(self.master) 
      hub = HubWindow.TheHub(root2) 
+0

откройте файл и прочитайте по очереди и сравните его с логином и паролем. – furas

ответ

1

Вы должны настроить себя с некоторыми переменными, которые могут захватить значения из полей ввода, когда вы хотите

self.userNameVar = StringVar() 
self.passwordVar = StringVar() 

Затем добавить их в качестве параметров при создании записи виджеты

self.nameEntry = Entry(self.master, 
         highlightcolor="grey", 
         textvariable=self.userNameVar, 
         highlightthickness=2, 
         highlightbackground="#FF4500") 

self.passwordEntry = Entry(self.master, 
          highlightcolor="grey", 
          textvariable=self.passwordVar, 
          highlightthickness=2, 
          highlightbackground="#FF4500") 

Например, можно связать и левой кнопкой мыши, чтобы проверить на validness вашего имени пользователя и пароля

self.master.bind('<Return>', lambda e: self.checkValidUsernamePassword()) 

self.master.bind("<Button-1>", lambda e: self.checkValidUsernamePassword()) 

Далее вы пишете функцию обратного вызова, где вы на самом деле идти о проверке эти имя пользователя/пароль комбо

def checkValidUserPass(self): 
    user = self.userNameVar.get() 
    attemptPassword = self.passwordVar.get() 

    try: 
     realPassword = self.users[user] 
     if attemptPassword == realPassword: 
      self.actuallyIsValidUser() # They are good - do something 

    except KeyError: # That user name is not in our dictionary of users 
     self.invaidUser() 

def invalidUser(): 
    print("That is a bad user.") 
    # Turn this into a message box, or other UX 

Но вам нужно будет добавить к вашей инициализации:

def __init__(self): 
    # ..... 
    self.users = {} # empty dictionary 
    self.loadUsers() # and load the user base 
    # ..... 


def loadUsers(self): 
    # Loadup all of the usernames and passwords into a dictionary 
    with open("LoginDetails.txt", 'r') as f: 
     for row in f: 
      user, password = row.split(" ") 
      self.users[user] = password # Puts this user & password into the dictionary 

Примечание : Вы использовали пробел как разделитель для имен/паролей (ошибка, потому что у некоторых имен есть пробелы). Попробуйте использовать другой символ, такой как a: и поместите этот символ туда, где вы пишете пользователь/пароль, а в split() выше

+0

Эй, спасибо за ваш вклад, однако после долгих испытаний я обнаружил, что возникла проблема с realPassword = self.users [user], когда ввод имени пользователя и пароля. Например, если имя пользователя было «Счастливым», пароль был «Сад». Self.users [пользователь] будет {'Happy': 'Sad \ n'} и поэтому сделает realPassword равным этому. Есть предположения ? – POISON72

+0

Хм, похоже, вам просто нужно снять границы новых строк («\ n») с настоящих паролей: –

-1

Попробуйте только разместить свой код, который идет речь;)

Лечить это как обычно - получить пользовательский ввод из текстового поля, присвоить его переменной, а затем проверить, что для пользователя, а затем добавьте второй и поле повторите этот процесс для вашего пароля. Таким образом, в псевдокоде:

PASSWORD = "password" 
USERNAME = "user" 
ACCESS = FALSE 

if INPUT_ONE = PASSWORD then 
    if INPUT_TWO = USERNAME then 
     ACCESS = TRUE 
    end if 
end if 
+0

whoa .. это is not python ... (это vbasic? Oh nm pseudocode я вижу) –

Смежные вопросы