elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Problema con Clases y Funciones POO (Python)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con Clases y Funciones POO (Python)  (Leído 3,233 veces)
DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Problema con Clases y Funciones POO (Python)
« en: 20 Enero 2022, 22:34 pm »

Hola, buenas a tod@s

Estoy intentando hacer un login verificando el usuario y password. Si lo hago normal sin POO me funciona y lo hago bien. La cosa es que estoy metiéndome en POO y quiero hacerlo en POO pero lo de vincular clases y funciones mas o menos lo llevo. Pero tengo aquí un fallo con que no lee el cursor, y lo tengo definido

Tengo el archivo principal:

Código
  1. from tkinter import *
  2. from tkinter import ttk
  3. import pymysql
  4. from tkinter import messagebox as MessageBox
  5. from tkinter import scrolledtext as st
  6. import conexion
  7.  
  8. class Aplicacion:
  9. def __init__(self):
  10. self.conexion1 = conexion.conexiones()
  11. self.ventana1 = Tk()
  12. self.ventana1.title("Login")
  13. self.ventana1.geometry("400x400")
  14. self.imagenLogo = PhotoImage(file="logo2.png")
  15. self.divLogo = Label(self.ventana1, image=self.imagenLogo)
  16. self.divLogo.place(x=93, y=0)
  17. self.x_ventana = self.ventana1.winfo_screenwidth() // 2 - 300 // 2
  18. self.y_ventana = self.ventana1.winfo_screenheight() // 2 - 300 // 2
  19. self.posicion = str(300) + "x" + str(300) + "+" + str(self.x_ventana) + "+" + str(self.y_ventana)
  20. self.ventana1.geometry(self.posicion)
  21. self.ventana1.resizable(0,0)
  22.  
  23. self.formulario()
  24.  
  25.  
  26.  
  27. self.ventana1.mainloop()
  28.  
  29. def formulario(self):
  30. ttk.Label(text="Usuario:").place(x=50, y=110)
  31. ttk.Label(text="Contraseña:").place(x=50, y=165)
  32.  
  33. self.formUsuarioString = StringVar()
  34. self.formUsuario = Entry(self.ventana1, textvariable=self.formUsuarioString)
  35. self.formUsuario.place(x=50, y=130, width=200, height=30)
  36.  
  37. self.formPasswordString = StringVar()
  38. self.formPassword = Entry(self.ventana1, textvariable=self.formPasswordString)
  39. self.formPassword.place(x=50, y=185, width=200, height=30)
  40.  
  41. botonAcceder = Button(self.ventana1, text="Acceder", command=self.login)
  42. botonAcceder.place(x=75, y=240, width=150, height=30)
  43.  
  44. def login(self):
  45. datos = (self.formUsuarioString.get(), self.formPasswordString.get())
  46.  
  47. self.conexion1.verificar(datos)
  48.  
  49.  
  50.  
  51.  
  52.  
  53. Ventana = Aplicacion()

y luego en el archivo conexión.py tengo eso:

Código
  1. import pymysql
  2.  
  3. class conexiones:
  4. def conexion(self):
  5. conexion2 = pymysql.connect(host='null',
  6.                                 user='myadmin',
  7.                                 password='null',
  8.                                 database='python',
  9.                                 charset='utf8mb4',
  10.                                 cursorclass=pymysql.cursors.DictCursor)
  11.  
  12. def verificar(self, datos):
  13. con1 = self.conexion()
  14. cur = con1.cursor()
  15. sql = "SELECT * FROM trabajador WHERE nombre='{}' AND password='{}'".format(self.formUsuarioString.get(), self.formPasswordString.get())
  16. cur.execute(sql)
  17. comprobardatosAcceso=cur.fetchall()

y este es el error que me da cuando intento hacer la consulta:

Código:
Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
    return self.func(*args)
  File "/Users/tomas/Downloads/DonMovil/objetos.py", line 47, in login
    self.conexion1.verificar(datos)
  File "/Users/tomas/Downloads/DonMovil/conexion.py", line 14, in verificar
    cur = con1.cursor()
AttributeError: 'NoneType' object has no attribute 'cursor'
[Finished in 12.2s]

¿Donde puede estar el error?

Cualquier información adicional lo agradecería.

Saludos!


En línea

Esta página web no está disponible - Google Chrome
Panic0

Desconectado Desconectado

Mensajes: 218



Ver Perfil
Re: Problema con Clases y Funciones POO (Python)
« Respuesta #1 en: 22 Enero 2022, 21:22 pm »

Hola, buenas a tod@s

Estoy intentando hacer un login verificando el usuario y password. Si lo hago normal sin POO me funciona y lo hago bien. La cosa es que estoy metiéndome en POO y quiero hacerlo en POO pero lo de vincular clases y funciones mas o menos lo llevo. Pero tengo aquí un fallo con que no lee el cursor, y lo tengo definido

Tengo el archivo principal:

Código
  1. from tkinter import *
  2. from tkinter import ttk
  3. import pymysql
  4. from tkinter import messagebox as MessageBox
  5. from tkinter import scrolledtext as st
  6. import conexion
  7.  
  8. class Aplicacion:
  9. def __init__(self):
  10. self.conexion1 = conexion.conexiones()
  11. self.ventana1 = Tk()
  12. self.ventana1.title("Login")
  13. self.ventana1.geometry("400x400")
  14. self.imagenLogo = PhotoImage(file="logo2.png")
  15. self.divLogo = Label(self.ventana1, image=self.imagenLogo)
  16. self.divLogo.place(x=93, y=0)
  17. self.x_ventana = self.ventana1.winfo_screenwidth() // 2 - 300 // 2
  18. self.y_ventana = self.ventana1.winfo_screenheight() // 2 - 300 // 2
  19. self.posicion = str(300) + "x" + str(300) + "+" + str(self.x_ventana) + "+" + str(self.y_ventana)
  20. self.ventana1.geometry(self.posicion)
  21. self.ventana1.resizable(0,0)
  22.  
  23. self.formulario()
  24.  
  25.  
  26.  
  27. self.ventana1.mainloop()
  28.  
  29. def formulario(self):
  30. ttk.Label(text="Usuario:").place(x=50, y=110)
  31. ttk.Label(text="Contraseña:").place(x=50, y=165)
  32.  
  33. self.formUsuarioString = StringVar()
  34. self.formUsuario = Entry(self.ventana1, textvariable=self.formUsuarioString)
  35. self.formUsuario.place(x=50, y=130, width=200, height=30)
  36.  
  37. self.formPasswordString = StringVar()
  38. self.formPassword = Entry(self.ventana1, textvariable=self.formPasswordString)
  39. self.formPassword.place(x=50, y=185, width=200, height=30)
  40.  
  41. botonAcceder = Button(self.ventana1, text="Acceder", command=self.login)
  42. botonAcceder.place(x=75, y=240, width=150, height=30)
  43.  
  44. def login(self):
  45. datos = (self.formUsuarioString.get(), self.formPasswordString.get())
  46.  
  47. self.conexion1.verificar(datos)
  48.  
  49.  
  50.  
  51.  
  52.  
  53. Ventana = Aplicacion()

y luego en el archivo conexión.py tengo eso:

Código
  1. import pymysql
  2.  
  3. class conexiones:
  4. def conexion(self):
  5. conexion2 = pymysql.connect(host='null',
  6.                                 user='myadmin',
  7.                                 password='null',
  8.                                 database='python',
  9.                                 charset='utf8mb4',
  10.                                 cursorclass=pymysql.cursors.DictCursor)
  11.  
  12. def verificar(self, datos):
  13. con1 = self.conexion()
  14. cur = con1.cursor()
  15. sql = "SELECT * FROM trabajador WHERE nombre='{}' AND password='{}'".format(self.formUsuarioString.get(), self.formPasswordString.get())
  16. cur.execute(sql)
  17. comprobardatosAcceso=cur.fetchall()

y este es el error que me da cuando intento hacer la consulta:

Código:
Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
    return self.func(*args)
  File "/Users/tomas/Downloads/DonMovil/objetos.py", line 47, in login
    self.conexion1.verificar(datos)
  File "/Users/tomas/Downloads/DonMovil/conexion.py", line 14, in verificar
    cur = con1.cursor()
AttributeError: 'NoneType' object has no attribute 'cursor'
[Finished in 12.2s]

¿Donde puede estar el error?

Cualquier información adicional lo agradecería.

Saludos!


El valor no está llegando a con1

Podes probar dos cosas:
1) globalizar con1


2) ponerle self a con1


En línea

Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.
DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: Problema con Clases y Funciones POO (Python)
« Respuesta #2 en: 23 Enero 2022, 14:05 pm »


El valor no está llegando a con1

Podes probar dos cosas:
1) globalizar con1


2) ponerle self a con1

Gracias por su comentario.

Al final no era nada de eso.

Solo había que hacer un return a la función conexión.

Código
  1. return conexion2

Con eso se ha solucionado el problema.

Gracias.
En línea

Esta página web no está disponible - Google Chrome
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python] Importar Funciones de C++ a Modulo de Python
Scripting
Di6it4Lj4ck4L 2 4,078 Último mensaje 2 Mayo 2011, 19:08 pm
por Di6it4Lj4ck4L
Ayuda!! :clases y funciones [SOLUCIONADO]
Programación C/C++
anamnesis_92 9 3,670 Último mensaje 24 Enero 2012, 19:25 pm
por Uknow
doble duda (arreglo dinamico y funciones entre clases)
Programación C/C++
rulovive 5 3,154 Último mensaje 5 Abril 2014, 22:11 pm
por rulovive
[PYTHON] Tutorial de clases en Python
Scripting
TheCrimulo 0 1,657 Último mensaje 9 Diciembre 2014, 18:09 pm
por TheCrimulo
(Python 3.5) Problema con variables globales y funciones
Scripting
BigKaz 2 2,317 Último mensaje 20 Diciembre 2016, 13:59 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines