tkinter - Проверка формы входа в систему из csv - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь создать форму для входа в tkinter, предполагается, что программа позволяет существующим пользователям вводить свое имя пользователя в поле ввода и свой пароль в поле ввода, затем python должен прочитать значения, хранящиеся в файле CSV, и затем проверьте правильность имени пользователя и пароля, затем они используют кнопку отправки, которая проверит, верны ли учетные данные и верны ли они; это позволит им перейти к следующему кадру. Я не уверен, как заставить это работать должным образом, потому что кнопка отправки ничего не делает.

Вот мой код:

class MainMenu(tk.Frame):

def __init__(self, parent, controller):
    tk.Frame.__init__(self, parent)
    self.controller = controller
    label = tk.Label(self, text="     Main Menu - Login    ", fg="red", font=controller.title_font2)
    label.pack(side="top", fill="x", pady=20)
    usernameL = tk.Label(self, text="Username").pack(side="top") 
    uUserLogin = tk.Entry(self)
    uUserLogin.pack()
    passwordL = tk.Label(self, text="Password").pack(side="top")
    uUserPassword = tk.Entry(self)
    uUserPassword.pack()

    def checkUser():
        uLoginUser = False
        uLoginPassword = False
        uUserCheck = uUserLogin.get()
        uUserCheckP = uUserPassword.get()
        with open("Users.csv", "r") as f:
            csvreader = csv.reader(f, delimiter=",")
            for row in csvreader:
                if uUserCheck == row[0]:
                    uLoginUser == True
                    if uUserCheckP == row[1]:
                        uLoginPassword == True
                        #labelT = tk.Label(self, text="Hello")
                        #labelT.pack()
        if uLoginUser and uLoginPassword == True:
            controller.show_frame("MainTMenu")

    submit = tk.Button(self, text="Submit",
                       command=checkUser())
    submit.pack()


    #If correct -> Go to next frame

Файл csv размещен с первой строкой, состоящей из 2 заголовков - в первом столбце указано «Пользователи», а во втором столбце - «Пароли» - остальные строки содержат пользователей и пароли в правильных столбцах и в правильных строках. .

Это может помочь понять формат (если я плохо объяснил):

 Users, Passwords
 user, password
 user, password

Любая помощь будет высоко ценится

1 Ответ

0 голосов
/ 16 мая 2019

Кнопка отправки ничего не делает

Это легко исправить, проблема в том, что ваша функция init создает кнопку, вызывающую команду, а не сохраняет ее command=checkUser(), есть два способа это исправить.

Измените параметр команды кнопки на command=checkUser или command=lambda: checkUser()

Чтобы исправить работу вашей формы входа, я изменил функцию checkUser (), вот мое обновление

def checkUser():
    uUserCheck = uUserLogin.get()
    uUserCheckP = uUserPassword.get()
    with open("Users.csv", "r") as f:
        csvreader = csv.reader(f, delimiter=",")
        for row in csvreader:
            if uUserCheck == row[0] and uUserCheckP == row[1]:
                labelT = tk.Label(self, text="Hello")
                labelT.pack()
                controller.show_frame("MainTMenu")
                break

Это исключает использование вложенных операторов if и прерывает цикл for, если найдено совпадение имени пользователя и пароля, поэтому нет необходимости каждый раз проверять каждый параметр имени пользователя и пароля.

Если у вас есть другие вопросы, не стесняйтесь спрашивать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...