Создайте экран входа в Python Tkinter, который проверяет данные учетной записи из файла CSV - PullRequest
0 голосов
/ 27 октября 2018

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

имя1, пароль1

имя2, пароль2

и т. Д.

или подобноеэто, если необходимо:

имя пользователя, пароль

имя1, пароль1

имя2, пароль2

и т. д.

где первая строка представляет имена строк.

Вот мой код:

from tkinter import *
import tkinter.messagebox as tm


class LoginFrame(Frame):
def __init__(self, master):
    super().__init__(master)

    self.label_username = Label(self, text="Username")
    self.label_password = Label(self, text="Password")

    self.entry_username = Entry(self)
    self.entry_password = Entry(self, show="*")

    self.label_username.grid(row=0, sticky=E)
    self.label_password.grid(row=1, sticky=E)
    self.entry_username.grid(row=0, column=1)
    self.entry_password.grid(row=1, column=1)
    self.logbtn = Button(self, text="Login", command=self._login_btn_clicked)
    self.logbtn.grid(columnspan=2)

    self.pack()

def _login_btn_clicked(self):
    # print("Clicked")
    username = self.entry_username.get()
    password = self.entry_password.get()

    # print(username, password)

    if username == "john" and password == "password":
        tm.showinfo("Login info", "Welcome John")
    else:
        tm.showerror("Login error", "Incorrect username")


root = Tk()
lf = LoginFrame(root)
root.mainloop()

обратите внимание, что 'if username == "john" и password == "пароль ":" был использован, потому что я не совсем знал, как использовать данные учетной записи из CSV.Можете ли вы помочь мне сделать это, чтобы окно Tkinter проверило детали в файле CSV?

Ответы [ 2 ]

0 голосов
/ 28 октября 2018
import csv


class LoginFrame(Frame):
    def __init__(self, master):
        super().__init__(master)

        self.label_username = Label(self, text="Username")
        self.label_password = Label(self, text="Password")

        self.entry_username = Entry(self)
        self.entry_password = Entry(self, show="*")

        self.label_username.grid(row=0, sticky=E)
        self.label_password.grid(row=1, sticky=E)
        self.entry_username.grid(row=0, column=1)
        self.entry_password.grid(row=1, column=1)
        self.logbtn = Button(self, text="OK", command=self._login_btn_clicked)
        self.logbtn.grid(columnspan=2)

        self.pack()

    def _login_btn_clicked(self):
        # print("Clicked")
        global p1
        with open('FILE', 'r') as f:
            reader = csv.reader(f, delimiter=',')
            my_dict = {k:v for k,v in reader}
        p1 = self.entry_username.get()
        password1 = self.entry_password.get()
        if (my_dict[p1]) == (password1):
            auth1 = True
            welcome1 = ("Welcome", p1)
            tm.showinfo("Login info", welcome1)
            root.destroy()
        else:
            tm.showerror("Login error", "Incorrect username")

root = Tk()
root.title("P1 Log in")
root.geometry('250x75')
lf = LoginFrame(root)
root.mainloop()

Это хорошо работает с текстовыми файлами.Мне не нужно было использовать CSV как таковой, но что-то, что можно использовать в качестве файла CSV (потому что CSV означает разделенные запятыми значения, которые работают так же хорошо, как настоящий файл CSV для Python).

0 голосов
/ 27 октября 2018

Тот факт, что вы используете поля ввода tkinter вместо вызовов input () для получения имени и пароля от пользователя, не имеет отношения к проблеме проверки имени и пароля с сохраненными данными.Я бы удалил код tkinter из вашего вопроса.В этом случае файл cvs не особенно хорош для хранения данных.(Он не помечает значения ключей как ключи.) Если данные будут использоваться только программой на языке python, файл python, скажем, namepass.py, с отображением dict будет проще.Пример:

{
'Alice': 'abc',
'Bob': 'xyz',
}

Затем проверить:

with open('namepass.py') as f:
    namepass = eval(f.read())
if namepass.get(name) == pass:
    # name is in dict and pass matches password
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...