#python #tkinter
Вопрос:
адрес электронной почты и пароль успешно сохраняются в текстовом файле, но я не слишком уверен, как сделать так, чтобы он считывал эти данные и указывал, есть ли адрес электронной почты и пароль в списке. я попробовал и сделал функцию «читать информацию», составил список там, где он берет то, что есть в текстиле, и помещает это в список. несмотря ни на что, вывод всегда будет «неверный адрес электронной почты или пароль». Я не слишком уверен, что мне делать. Спасибо вам за помощь
from tkinter import*
from PIL import Image, ImageTk
import tkinter as tk
root = Tk()
root.geometry('670x466')
class Goode_brothers:
def __init__(self, parent):
myFrame = Frame(parent)
myFrame.pack()
self.load = Image.open('new-dip-project\food.jpg')
self.render = ImageTk.PhotoImage(self.load)
self.img = Label(parent, image = self.render)
self.img.place(x = -26, y =0)
self.img_login = PhotoImage(file = 'new-dip-project\button (3).png')
self.b1 = Button(parent,image = self.img_login, command = self.read_info, bd = 0, bg = '#3b353b', activebackground = '#3b353b')
self.b1.place(x = 275, y = 310)
self.img_register = PhotoImage(file = 'new-dip-project\register.png')
self.b2 = Button(parent,image = self.img_register, command = self.openNewWindow, bd = 0, bg = '#3b353b', activebackground = '#3b353b')
self.b2.place(x = 265, y = 400)
self.canvas = Canvas(parent, width = 400, height = 120)
self.canvas.pack()
self.img4 = ImageTk.PhotoImage(Image.open('new-dip-project\goode.png'))
self.canvas.create_image(20, 20, anchor=NW, image=self.img4)
self.email = Entry(parent).place(x = 340, y = 180)
self.password = Entry(parent).place(x = 340, y = 250)
self.img_label = PhotoImage(file = 'new-dip-project\label-image.png')
self.name = Label(parent, image = self.img_label, text = "Email:", bg = '#3c3a3b').place(x = 197,y = 178)
self.img_label_pass = PhotoImage(file = 'new-dip-project\label_pass.png')
self.name = Label(parent, image = self.img_label_pass, text = "Password:", bg = '#3c3a3b').place(x = 177,y = 245)
def create_pass(self):
self.password_length = Label(self.root2, text = '')
self.password_length.place(x = 80, y = 140)
self.pass_word = str(self.password2.get()) #this code is getting the users input from the password entry box
if len(self.pass_word) >= 8: #if the characters gotten from the pasword entry is less than 8, an erorr message will appear
self.save_info()
self.registered = Label(self.root2, text = 'You have successfully registered, this window will now automatically close', font=("open sans", "8"))
self.registered.place(x = 80, y = 140)
self.root2.after(4000, self.root2.destroy)
else:
self.password_length.configure(text="""Your password must be atleast eight characters long. Please try again""", font=("open sans", "8"))
def save_info(self):
self.email_reg = str(self.email2.get())
self.pass_word = str(self.password2.get())
print(self.email2)
file = open('emails.txt', 'a ')
file.write(self.email_reg ', ' self.pass_word 'n')
def read_info(self):
read_ep = open('emails.txt', 'r')
email_list = []
password_list = []
for i in read_ep:
a,b = i.split(', ')
b = b.strip()
email_list.append(a)
password_list.append(b)
data = dict(zip(email_list, password_list))
if self.email and self.password in email_list and password_list:
print('email and password exist')
else:
print('email or password wrong')
def create_email(self):
self.username_length = Label(self.root2, text = '', font = '40')
self.username_length.place(x = 165, y = 140)
self.email_reg = str(self.email2.get())
if len(self.email_reg) >= 1: #if user has inputted a letter or number it will allow it to go to the next function
self.create_pass()
self.username_length.destroy()
else:
self.username_length.configure(text='Please enter your username or password', font=("open sans", "8"))
self.username_length.after(3000, self.username_length.destroy)
def openNewWindow(self):
# Toplevel object which will
# be treated as a new window
self.root2 = Toplevel(root)
# sets the title of the
# Toplevel widget
self.root2.title("New Window")
# sets the geometry of toplevel
self.root2.geometry("500x300")
self.load2 = Image.open('new-dip-project\registerscreen3.jpg')
self.render2 = ImageTk.PhotoImage(self.load2)
self.img2 = Label(self.root2, image = self.render2)
self.img2.place(x = -2, y =0)
self.img_label2 = PhotoImage(file = 'new-dip-project\label-image.png')
self.name = Label(self.root2, image = self.img_label, bg = '#292929').place(x = 130,y = 102)
self.img_label_pass2 = PhotoImage(file = 'new-dip-project\label_pass.png')
self.name = Label(self.root2, image = self.img_label_pass, bg = '#292929').place(x = 120,y = 173)
self.email2 = Entry(self.root2)
self.email2.place(x = 280, y = 104)
self.password2 = Entry(self.root2)
self.password2.place(x = 280, y = 180)
self.img_register2 = PhotoImage(file = 'new-dip-project\register.png')
self.b3 = Button(self.root2,image = self.img_register2, command = self.create_email, bd = 0, bg = '#0d0d0d', activebackground = '#0d0d0d')
self.b3.place(x = 180, y = 250)
self.img_reg2 = PhotoImage(file = 'new-dip-project\regtitle.png')
self.name9 = Label(self.root2, image = self.img_reg2, bg = '#131313')
self.name9.place(x = 109, y = 10)
if __name__ == "__main__":
e = Goode_brothers(root)
root.title('Goode brothers')
root.mainloop()
Ответ №1:
В вашем коде есть несколько проблем:
self.email
иself.password
являютсяNone
из-за того, как они созданы:
self.email = Entry(parent).place(x = 340, y = 180)
self.password = Entry(parent).place(x = 340, y = 250)
Вы должны использовать:
self.email = Entry(parent)
self.email.place(x = 340, y = 180)
self.password = Entry(parent)
self.password.place(x = 340, y = 250)
- Вы должны использовать
self.email.get()
иself.password.get()
в операторе if внутриread_info()
. Также неверно выражение в операторе if.
Ниже изменено read_info()
:
def read_info(self):
email_list = []
password_list = []
with open("emails.txt") as read_ep:
for i in read_ep:
a, b = i.split(", ")
b = b.strip()
email_list.append(a)
password_list.append(b)
data = dict(zip(email_list, password_list))
#print(data)
email = self.email.get() # get the input email
password = self.password.get() # get the input password
if email in data and password == data[email]:
print("email and password exist")
else:
print("email and password wrong")
Однако вы можете упростить read_info()
, как показано ниже:
def read_info(self):
accounts = []
with open("emails.txt") as read_ep:
for line in read_ep:
accounts.append(line.strip().split(", "))
#print(accounts)
credential = [self.email.get(), self.password.get()]
if credential in accounts:
print("email and password exist")
else:
print("email and password wrong")