Информация, вводимая пользователем, не регистрируется в файле

#python #python-3.x #function #class #user-interface

#питон #python-3.x #функция #класс #пользовательский интерфейс

Вопрос:

Я работаю над проектом на Python, создаю приложение с графическим интерфейсом. Вот часть моего кода:

 class Register(Frame):  def __init__(self, master):  Frame.__init__(self, master)  self.config(bg = "black")    def register_user():  username_info = username.get()  password_info = password.get()  username_entry.delete(0, END)  password_entry.delete(0, END)  file = open(username_info, "w")  file.write(username_info   "n")  file.write(password_info   "n")  file.close()      Label(register_user, text="Registration Success", fg="black", font=("calibri", 12)).pack()        Label(self,text="Please enter details below to Register", bg="white").pack()  Label(self,text="").pack()    username = Label(self, text="Username: ", bg="black", fg="white")  username.pack()  entryusername = Entry(self, width=20, bg="white")  entryusername.pack()    pw = Label(self, text="Password: ", bg="black", fg="white")  pw.pack()  entrypw = Entry(self, width=20, bg="white")  entrypw.pack()    save = Button(self, text="Save", width=8, command=lambda: master.switch(Login))  save.pack(padx=10, pady=10)  

Моя проблема в том, что как только пользователь регистрирует свое имя пользователя и пароль, они не сохраняются в файл. Итак, как только пользователь хочет войти в систему, он говорит, что пользователь не найден.

Я не могу понять, чего не хватает, было бы очень хорошо, если бы кто-нибудь мог мне помочь.

Спасибо

Комментарии:

1. можете ли вы добавить воспроизводимый код, а не только частичный код?

2. ты никогда не бежишь register_user() , так что это не может его спасти. Может быть, в Button вас стоит использовать command=register_user и внутри register_user() добавить master.switch(Login)

3. Кстати: вы используете register_user в качестве родителя для Label — это неправильно.

4. вы получаете значения из неправильных виджетов. Вы получаете username.get() , но username это Label . Вы должны использовать entryusername.get() . И вы получаете password.get() , но у вас нет password — вы должны это сделать entrypw.get() . Вы также пытаетесь удалить текст, password_entry но у вас его нет password_entry

Ответ №1:

Ты никогда не бежишь register_user() , так что это не может его спасти.

Может Button быть, вам следует использовать command=register_user и в конце register_user() добавить master.switch(Login)


кстати:

Вы получаете значения из неправильных виджетов. Вы получаете username.get() , но username это а Label . Вы должны использовать entryusername.get() . И вы получаете password.get() , но у вас нет password — вы должны использовать entrypw.get() . Вы также пытаетесь удалить текст, password_entry но у вас его нет password_entry .

Вы также используете register_user в качестве родителя для Label — это неправильно. Кроме того, после регистрации он переключится на другой Frame , так что у него не будет времени, чтобы отобразить его.


Минимальный рабочий код с другими изменениями. Но я пропускаю код, который меняется на Login .

Я помещаю register_user() обычную функцию в класс, поэтому мне нужно ее использовать self. , но это делает код более читабельным.

 import tkinter as tk # PEP8: `import *` is not preferred  class Register(tk.Frame):    def __init__(self, master):  super().__init__(master)    self.config(bg="black")   l = tk.Label(self, text="Please enter details below to Register", bg="white")  l.pack(pady=(0, 10))   l = tk.Label(self, text="Username: ", bg="black", fg="white")  l.pack()    self.username_entry = tk.Entry(self, width=20, bg="white")  self.username_entry.pack()   l = tk.Label(self, text="Password: ", bg="black", fg="white")  l.pack()    self.password_entry = tk.Entry(self, width=20, bg="white")  self.password_entry.pack()   b = tk.Button(self, text="Save", width=8, command=self.register_user)  b.pack(padx=10, pady=10)   def register_user(self):  username_info = self.username_entry.get()  password_info = self.password_entry.get()    self.username_entry.delete(0, 'end')  self.password_entry.delete(0, 'end')    file = open(username_info, "w")  file.write(username_info   "n")  file.write(password_info   "n")  file.close()   self.master.switch(Login)  # --- main ---  root = tk.Tk()  reg = Register(root) reg.pack()  root.mainloop()