[ Foro de Python ]

Trato de acceder desde un método de clase a otro método de otra clase en python y tengo un! AttributeError¡

30-Oct-2021 17:31
Invitado (Andr?s Felipe L?pez)
0 Respuestas

Estoy creando un inicio de sesión de usuario, donde tengo diferentes clases, base_usuarios (), ventana (), registro_inicio () y registro_usuario (). el login inicia en registro_inicio (), al presionar el botón registrarse cambia de pagina a registro_usuario donde el usuario puede ingresar sus datos que la tengo como un método de clase base_usuarios () Agregar () y cuando el usuario presione el botón de registrarme para que se guarden los datos quiero que cambie de pagina a la primera donde inicio el programa y obtengo un error AttributeError: '_tkinter.tkapp' object has no attribute 'paginas' que proviene de un método de la clase ventana () lo que quiero es controlar desde un método 2 métodos de diferentes clases con if y pasar ese método a un botón el método se llama self.DE_R_I() donde self.Agregar () si se ejecuta pero la segunda no .....

ESTE ES EL CODIGO:

class Base_Usuarios():

def __init__(self):
self.conexion=sqlite3.connect("Usuarios")

def Agregar(self):

self.conexion=sqlite3.connect("Usuarios")
micursor=self.conexion.cursor()

try:
micursor.execute("""
CREATE TABLE DATOS_USUARIOS(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Nombres VARCHAR(50),
Apellidos VARCHAR(50),
Cedula VARCHAR(50),
Emai_l VARCHAR(50),
Celular VARCHAR(20),
Ciudad VARCHAR(30),
Usuario VARCHAR(30),
Contraseña VARCHAR(30),
Confirmar_contrasena VARCHAR(30))
""")

except:

self.conexion=sqlite3.connect("Usuarios")
micursor=self.conexion.cursor()

datos=(self.nombre.get(),self.apellido.get(),
self.cedula.get(),self.emmail.get(),
self.celular.get(),self.ciudad.get(),
self.usuario.get(),self.contrasena.get(),
self.confirmar_contrasena.get())

if self.nombre.get()=="" or self.apellido.get()=="" or self.cedula.get()=="" or  self.emmail.get()=="" or  self.celular.get()=="" or  self.ciudad.get()=="" or  self.usuario.get()=="" or  self.contrasena.get()=="" or  self.confirmar_contrasena.get()=="":
messagebox.showerror(title="Login Error", message="Todos Los Campos Son Obligatorios")


elif micursor.execute("INSERT INTO DATOS_USUARIOS VALUES (NULL,?,?,?,?,?,?,?,?,?)",(datos)):
return True
else:
return False
self.conexion.commit()

self.txt_nombres.delete(0,END)
self.txt_apellidos.delete(0,END)
self.txt_cedula.delete(0,END)
self.txt_email.delete(0,END)
self.txt_celular.delete(0,END)
self.lista_ciudades.delete(0,END)
self.txt_usuario.delete(0,END)
self.txt_contrasena.delete(0,END)
self.txt_confirma_contrasena.delete(0,END)

def validar_usu_cont(self):
self.conexion=sqlite3.connect("Usuarios")
self.micursor=self.conexion.cursor()

usu=self.usuario.get()
contr=self.contrasena.get()

self.micursor.execute("SELECT * FROM DATOS_USUARIOS WHERE Usuario = ? AND Contraseña = ?",(usu,contr))

if self.micursor.fetchall():
self.cambio_pagina(Usuario_Registrado)

else:
messagebox.showerror(title="Login Error",message="El Usuario o Contraseña Son Incorrectos")

self.micursor.close()


class Ventana(Tk):

def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)

self.title("(B.T.D) Busca Tu Documento.")
self.rowconfigure(0,weight=1)
self.columnconfigure(0,weight=1)
self.iconbitmap("busca.Ico")

self.paginas=dict()

for f in (Registro_Inicio,Registro_usuario,Usuario_Registrado):
frame=f(self,self)
self.paginas[f]=frame
frame.grid(row=0,column=0,sticky="nsew")
self.cambio_pagina(Registro_Inicio)

def cambio_pagina(self,pagina_llamada):
frame=self.paginas[pagina_llamada]
frame.tkraise()


class Registro_Inicio(Frame,Base_Usuarios):

def __init__(self,contenedor,controlador,*args,**kwargs):
super().__init__(contenedor,*args,**kwargs)

self.config(bg="#A3B5C2")
self.btc=PhotoImage(file="BTD.png")
self.usuario=StringVar()
self.contrasena=StringVar()
self.widgets_inicio(controlador)

def widgets_inicio(self,controlador):
login_menu=Frame(self,bg="#A3B5C2")
login_menu.pack(expand=1)


busca_tu_documento=Label(login_menu,
image=self.btc,
width=100,
height=100,
bg="#A3B5C2")
busca_tu_documento.grid(row=1,column=1,pady=20)

usuario=Entry(login_menu,width=30,textvariable=self.usuario)
usuario.grid(row=2,column=1)
usuario.insert(0,"Escriba Su Usuario")
usuario.config(state=DISABLED)

contrasena=Entry(login_menu,width=30,textvariable=self.contrasena)
contrasena.grid(row=4,column=1,pady=20)
contrasena.insert(0,"Escriba Su Contraseña")
contrasena.config(state=DISABLED)

btn_Iniciar_secion=Button(login_menu,
text="Iniciar Seción",
bg="#646A73",
fg="white",
activebackground="#199AC2",
activeforeground="white",
cursor="mouse",
width=20,
font=("Georgia"),command=self.validar_usu_cont)
btn_Iniciar_secion.grid(row=5,column=1)

btn_registrese=Button(login_menu,
text="Registrese",
bg="#646A73",
fg="white",
activebackground="#199AC2",
activeforeground="white",
cursor="mouse",
width=20,
font=("Georgia"),command=lambda:controlador.cambio_pagina(Registro_usuario))
btn_registrese.grid(row=6,column=1,pady=20)

indicacion=Label(login_menu,text="¡Si ya estás Registrado"
"\nInicia Seción!",font=("Georgia"),bg="#A3B5C2")
indicacion.grid(row=7,column=1)

def habilitar_entry_1(self):
usuario.config(state=NORMAL)
usuario.delete(0,END)

habilitar_entry_id=usuario.bind("<Button-1>",habilitar_entry_1)

def habilitar_entry_2(self):
contrasena.config(state=NORMAL)
contrasena.delete(0,END)
contrasena.config(show="*")

habilitar_entry_id=contrasena.bind("<Button-1>",habilitar_entry_2)

def deshabilitar_entrys(self):
usuario.insert(0,"Escriba Su Usuario")
usuario.config(state=DISABLED)
contrasena.insert(0,"Escriba Su Contraseña")
contrasena.config(state=DISABLED)

deshabilitar_entryss=self.bind("<Button-1>",deshabilitar_entrys)
deshabilitar_entrysss=busca_tu_documento.bind("<Button-1>",deshabilitar_entrys)


class Registro_usuario(Frame,Base_Usuarios):

def __init__(self,contenedor,controlador,*args,**kwargs):
super().__init__(contenedor,*args,**kwargs)

self.config(bg="#A3B5C2")
self.btc=PhotoImage(file="BTD.png")

self.nombre=StringVar()
self.apellido=StringVar()
self.cedula=StringVar()
self.emmail=StringVar()
self.celular=StringVar()
self.ciudad=StringVar()
self.usuario=StringVar()
self.contrasena=StringVar()
self.confirmar_contrasena=StringVar()

self.ciudades=("BOGOTÁ","MEDELLÍN","CALÍ","BARRANQUILLA",
"CARTAGENA","CÚCUTA","SOLEDAD","IBAGUÉ","BUCARAMANGA","SANTA MARTA","VILLAVICENCIO","SOACHA",
"PEREIRA","BELLO","VALLEDUPAR","MONTERIA","PASTO","MANIZALES","BUENAVENTURA","NEIVA",
"BARRANCABERMEJA","PALMIRA","ARMENIA","POPAYAN","SINCELEJO","ITAGUI","FLORIDABALNCA","RIOACHA",
"ENVIGADO","TULUÁ","DOSQUEBRADAS","SAN ANDRES DE TUMACO","TUNJA","GIRÓN","APARTADÓ","FLORENCIA",
"URIBIA","IPIALES","TURBO","MAICAO","PIEDECUESTA","YOPAL","OCAÑA","FUSAGASUGÁ","CARTAGO",
"FACATATIVÁ","CHÍA","MAGANGUÉ","PITALITO","CAUCASIA","ZIPAQUIRÁ","MALAMBO","RIONEGRO","LORICA",
"JAMUNDI","QUIBDÓ","GUADALAJARA DE BUGA","YUMBO","SOGAMOSO","DUITAMA","GIRARDOT","CÍENAGA")
self.widgets(controlador)

def widgets(self,controlador):
self.frame_formulario=Frame(self,bg="#A3B5C2")
self.frame_formulario.pack(expand=1)

self.busca_tu_documento=Label(self.frame_formulario,
image=self.btc,
width=100,
height=100,
bg="#A3B5C2")
self.busca_tu_documento.grid(row=0,columnspan=2)

self.lb_nombres=Label(self.frame_formulario,
text="Nombres:",
font=("Georgia"),bg="#A3B5C2")
self.lb_nombres.grid(row=1,column=0,padx=10,pady=10,sticky="e")

self.lb_apellidos=Label(self.frame_formulario,
text="Apellidos:",
font=("Georgia"),bg="#A3B5C2")
self.lb_apellidos.grid(row=2,column=0,padx=10,pady=10,sticky="e")

self.lb_cedula=Label(self.frame_formulario,
text="Num. Cédula:",
font=("Georgia"),bg="#A3B5C2")
self.lb_cedula.grid(row=3,column=0,padx=10,pady=10,sticky="e")

self.lb_email=Label(self.frame_formulario,
text="Emai-l:",
font=("Georgia"),bg="#A3B5C2")
self.lb_email.grid(row=4,column=0,padx=10,pady=10,sticky="e")

self.lb_celular=Label(self.frame_formulario,
text="Num. Celular:",
font=("Georgia"),bg="#A3B5C2")
self.lb_celular.grid(row=5,column=0,padx=10,pady=10,sticky="e")

self.lb_ciudad=Label(self.frame_formulario,
text="Ciudad:",
font=("Georgia"),bg="#A3B5C2")
self.lb_ciudad.grid(row=6,column=0,padx=10,pady=10,sticky="e")

self.lb_usuario=Label(self.frame_formulario,
text="Usuario:",
font=("Georgia"),bg="#A3B5C2")
self.lb_usuario.grid(row=7,column=0,padx=10,pady=10,sticky="e")

self.lb_contrasena=Label(self.frame_formulario,
text="Ingrese Una Contraseña:",
font=("Georgia"),bg="#A3B5C2")
self.lb_contrasena.grid(row=8,column=0,padx=10,pady=10,sticky="e")

self.lb_confirma_contrasena=Label(self.frame_formulario,
text="Confirme Su Contraseña:",
font=("Georgia"),bg="#A3B5C2")
self.lb_confirma_contrasena.grid(row=9,column=0,padx=10,pady=10,sticky="e")

self.txt_nombres=Entry(self.frame_formulario,font=("Georgia"),textvariable=self.nombre)
self.txt_nombres.grid(row=1,column=1,padx=10,pady=10)
self.txt_nombres.focus()

self.txt_apellidos=Entry(self.frame_formulario,font=("Georgia"),textvariable=self.apellido)
self.txt_apellidos.grid(row=2,column=1,padx=10,pady=10)

self.txt_cedula=Entry(self.frame_formulario,font=("Georgia"),textvariable=self.cedula)
self.txt_cedula.grid(row=3,column=1,padx=10,pady=10)

self.txt_email=Entry(self.frame_formulario,font=("Georgia"),textvariable=self.emmail)
self.txt_email.grid(row=4,column=1,padx=10,pady=10)

self.txt_celular=Entry(self.frame_formulario,font=("Georgia"),textvariable=self.celular)
self.txt_celular.grid(row=5,column=1,padx=10,pady=10)

self.lista_ciudades=ttk.Combobox(self.frame_formulario,textvariable=self.ciudad,values=self.ciudades)
self.lista_ciudades.config(state="readonly",width=30)
self.lista_ciudades.grid(row=6,column=1,padx=10,pady=10)

self.txt_usuario=Entry(self.frame_formulario,font=("Georgia"),textvariable=self.usuario)
self.txt_usuario.grid(row=7,column=1,padx=10,pady=10)

self.txt_contrasena=Entry(self.frame_formulario,font=("Georgia"),textvariable=self.contrasena)
self.txt_contrasena.grid(row=8,column=1,padx=10,pady=10)
self.txt_contrasena.config(show="?")

self.txt_confirma_contrasena=Entry(self.frame_formulario,font=("Georgia"),textvariable=self.confirmar_contrasena)
self.txt_confirma_contrasena.grid(row=9,column=1,padx=10,pady=10)
self.txt_confirma_contrasena.config(show="¿")

self.btn_registrarme=Button(self.frame_formulario,
text="Registrarme",
bg="#646A73",
fg="white",
activebackground="#199AC2",
activeforeground="white",
cursor="mouse",
width=20,
font=("Georgia"),command=self.DE_R_I)
self.btn_registrarme.grid(row=10,columnspan=2,padx=10,pady=10)

def DE_R_I(self):
if self.Agregar():
self.cambio_pagina(Registro_Inicio)




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)