我的目标是获得一个具有两个选项卡的非常基本的GUI,其中第一个选项卡具有登录、注册新用户和注销此用户的选项。如果我想点击第二个选项(注册用户或称为“darse de alta”),应该会出现第二个窗口(并关闭第一个窗口),我可以在其中注册我的信息(姓名、dni和电话号码)。那么这个程序的最后一点应该是将这个新用户添加到一个名为self.socios的数据库中。这是因为在类Registro_socios中的方法“agregar”中,每当我想注册一个新用户时,必须将他添加到数据库中。 我不知道如何将新用户与以前创建的类连接起来。 感谢所有能够以某种方式解释和澄清的人
class Socio:
def __init__(self,nombre_socio,dni,telefono):
self.nombre = nombre_socio
self.dni = dni
self.telefono = telefono
def __str__(self):
return "Nombre: {0}\nDNI: {1}\nTelefono: {2}".format(self.nombre,self.dni,self.telefono)
class Registro_socios:
def __init__(self,baseDatos_socios = None):
if baseDatos_socios is None:
baseDatos_socios = {} # Diccionario vacío con DNIs como Keys
self.socios = baseDatos_socios
def agregar(self,socio):
if self.existe(socio): # En el caso que existe retorne True
raise KeyError(f'{socio.__class__.__name__} ya existente') # A Python KeyError exception is what is raised when you try to access a key that isn't in a dictionary ( dict )
self.socios[socio.dni] = socio
def existe(self,socio):
if socio.dni in self.socios:
return True
return False
root = tk.Tk()
miFrame = Frame(root)
# miFrame = Frame(root,width=1000,height=500)
miFrame.pack()
def alta_socio():
otra_ventana = tk.Toplevel(root)
miFrame2 = Frame(otra_ventana)
miFrame2.pack()
texto_nombreUsuario = Entry(miFrame2).grid(row=0,column=1, padx=5, pady=5)
nombre_usuario = Label(miFrame2, text='Nombre de socio: ').grid(row=0,column=0, padx=5, pady=5)
texto_DNI = Entry(miFrame2).grid(row=1,column=1, padx=5, pady=5)
nombre_usuario = Label(miFrame2, text='DNI: ').grid(row=1,column=0, padx=5, pady=5)
texto_nombreUsuario = Entry(miFrame2).grid(row=2,column=1, padx=5, pady=5)
nombre_usuario = Label(miFrame2, text='Teléfono de contacto: ').grid(row=2,column=0, padx=5, pady=5)
root.iconify()
botonInicio = Button(root, text='Entrar',bg='orange')
botonInicio.pack()
boton_AltaSocio = Button(root, text='Darse de alta',bg='orange', command=alta_socio)
boton_AltaSocio.pack()
boton_BajaSocio = Button(root, text='Darse de baja',bg='orange', command=baja_socio)
boton_BajaSocio.pack()
root.mainloop()
我看到这里有很多错误。第一个是用
tk.Tk()
调用主窗口,框架用Frame
调用,因此我认为您要像这样导入tkinter两次:忘记第二次导入,将
tk
放在每个小部件之前然后按钮“dar se baja”调用一个未定义的方法
在
alta_socio
方法中,您正在执行以下操作:这是不好的,因为当
tk.Entry()
返回类条目的实例时,Entry.grid()
方法不返回任何内容。因此texto_nombeUsuario
将是None
,您将无法访问条目小部件中的内容。您应该这样做:另一个选项是使用StringVar:
对于
alta_socio()
中的第三个条目,您用于电话的变量与用于名称的变量相同。修好它。最后,您可以添加一个tk.Button
来调用一个方法,该方法将创建一个Socio
。比如:方法
add_socio()
可以是来自alta_socio()
的嵌套方法,这样它就可以访问变量texto_nombreUsuario
、texto_DNI
和texto_telefono
。它使用命令texto_nombreUsuario.get()
从texto_nombreUsuario
获取文本,并调用先前创建的类:相关问题 更多 >
编程相关推荐