#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()