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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 49
1  Programación / Scripting / Error al cerrar ventana principal tkinter con destroy() en: 6 Agosto 2023, 02:14 am
Buenas, tengo un problema estoy intentado cerrar la ventana principal al hacel login, con destroy(), pero me lanza error ¿por qué? que estoy haciendo mal? como podria solucionarlo, cualquier informacion adicional lo agradeceria.
el error que me lanza cuando presiono el boton y quiero cerrar la ventana es el siguiente:

Código
  1. Exception in Tkinter callback
  2. Traceback (most recent call last):
  3.  File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/tkinter/__init__.py", line 1948, in __call__
  4.    return self.func(*args)
  5.           ^^^^^^^^^^^^^^^^
  6.  File "/Users/tomassanchezgarcia/Desktop/python-test/iniciar_sesion.py", line 84, in validar
  7.    self.root.destroy()
  8.    ^^^^^^^^^
  9. AttributeError: 'Login' object has no attribute 'root'

main.py

Código
  1. from tkinter import *
  2. from tkinter import ttk
  3. import tkinter as tk
  4. import pymysql
  5. from conexion import *
  6. from tkinter import messagebox
  7. from PIL import Image, ImageTk
  8. from iniciar_sesion import Login
  9.  
  10. class AplicacionInventario:
  11.  
  12.    def __init__(self):
  13.        self.root = Tk()
  14.        self.root.title("StockMaster")
  15.        self.root.geometry("400x500")
  16.        #Bloquear agrandar ventana
  17.        self.root.resizable(0,0)
  18.  
  19.        self.wtotal = self.root.winfo_screenwidth()
  20.        self.htotal = self.root.winfo_screenheight()
  21.        #  Guardamos el largo y alto de la ventana
  22.        self.wventana = 400
  23.        self.hventana = 500
  24.        # #  Aplicamos la siguiente formula para calcular donde debería posicionarse
  25.        self.pwidth = round(self.wtotal/2-self.wventana/2)
  26.        self.pheight = round(self.htotal/2-self.hventana/2)
  27.        #  Se lo aplicamos a la geometría de la ventana
  28.        self.root.geometry(str(self.wventana)+"x"+str(self.hventana)+"+"+str(self.pwidth)+"+"+str(self.pheight))
  29.  
  30.        self.imagen = Image.open("src/logo.png")
  31.        self.imagen = self.imagen.resize((350, 100))  # Opcional: Redimensionar la imagen
  32.        self.imagen = ImageTk.PhotoImage(self.imagen)
  33.        # Crear un widget Label con la imagen y colocarlo en la ventana
  34.        self.label_imagen = tk.Label(self.root, image=self.imagen)
  35.        self.label_imagen.pack(pady=20)
  36.  
  37.        self.login1 = Login(self)
  38.  
  39.  
  40.        #fetch_data_button = tk.Button(self.root, text="Obtener Datos", command=self.mostrar2)
  41.        #fetch_data_button.pack()
  42.  
  43.  
  44.        self.root.mainloop()
  45.  
  46. AplicacionInventario()

iniciar_sesion.py

Código
  1. from tkinter import *
  2. from tkinter import ttk
  3. import tkinter as tk
  4. import pymysql
  5. from conexion import *
  6. from tkinter import messagebox
  7. from PIL import Image, ImageTk
  8. from test2 import Menus
  9.  
  10. class Login:
  11.    def __init__(self, app):
  12.        self.app = app
  13.  
  14.        self.t_Email = "Email:"
  15.        self.label_email = tk.Label(text=self.t_Email)
  16.        self.label_email.pack(pady=5, padx=20)
  17.        self.label_email.place(x=150, y=150, width=100, height=20)
  18.  
  19.        self.entry_email = tk.Entry()
  20.        self.entry_email.pack(pady=5)
  21.        self.entry_email.place(x=75, y=170, width=250, height=50)
  22.  
  23.        self.t_Password = "Contraseña:"
  24.        self.label_password = tk.Label(text=self.t_Password)
  25.        self.label_password.pack(pady=5, padx=20)
  26.        self.label_password.place(x=150, y=220, width=100, height=20)
  27.  
  28.        self.entry_password = tk.Entry(show="*")
  29.        self.entry_password.pack(pady=5)
  30.        self.entry_password.place(x=75, y=240, width=250, height=50)
  31.  
  32.        self.login_email = self.entry_email.get()
  33.        self.login_password = self.entry_password.get()
  34.  
  35.        self.boton_login = tk.Button(text="Iniciar Sesión", command=self.validar)
  36.        self.boton_login.pack(pady=5)
  37.        self.boton_login.place(x=125, y=300, width=150, height=50)
  38.  
  39.    def validar(self):
  40.        #self.conexion_login = connect_to_database()
  41.        #self.cursor_conexion_login = self.conexion_login.cursor()
  42.  
  43.        #self.cursor_conexion_login.execute("SELECT email, password FROM usuarios WHERE email=%s AND password=%s", (self.login_email, self.login_password))
  44.        #self.verificar_login = self.cursor_conexion_login.fetchall()
  45.  
  46.        #messagebox.showwarning("Advertencia", self.verificar_login)
  47.  
  48.        # Conectarse a la base de datos utilizando la función importada
  49.        self.connection2 = connect_to_database()
  50.        self.cursor2 = self.connection2.cursor()
  51.        # Ejemplo: Ejecutar una consulta para obtener datos
  52.        self.cursor2.execute("SELECT nombre,password FROM usuarios")
  53.        self.data2 = self.cursor2.fetchall()
  54.        #messagebox.showwarning("Advertencia", self.data2)
  55.        # Cerrar el cursor y la conexión
  56.        for self.fila in self.data2:
  57.            self.v_email = self.fila[0]
  58.            self.v_password = self.fila[1]
  59.  
  60.        self.cursor2.close()
  61.        self.connection2.close()
  62.        if self.entry_email.get() == "" or self.entry_password.get() == "":
  63.            self.dialogo = tk.Toplevel()
  64.            self.dialogo.title("Diálogo Personalizado")
  65.            self.dialogo.geometry("300x50")
  66.            self.dialogo.resizable(0,0)
  67.  
  68.            self.wtotal2 = self.dialogo.winfo_screenwidth()
  69.            self.htotal2 = self.dialogo.winfo_screenheight()
  70.  
  71.            self.wventana2 = 300
  72.            self.hventana2 = 50
  73.  
  74.            self.pwidth2 = round(self.wtotal2/2-self.wventana2/2)
  75.            self.pheight2 = round(self.htotal2/2-self.hventana2/2)
  76.  
  77.            self.dialogo.geometry(str(self.wventana2)+"x"+str(self.hventana2)+"+"+str(self.pwidth2)+"+"+str(self.pheight2))
  78.            self.etiqueta = tk.Label(self.dialogo, text="Este es un cuadro de diálogo personalizado.", padx=10, pady=10)
  79.            self.etiqueta.pack()
  80.        elif self.entry_email.get() == self.v_email and self.entry_password.get() == self.v_password:
  81.            #messagebox.showwarning("Advertencia", "PERFECTO COINCIDE")
  82.            self.ventana_menu = Menus(self)
  83.        else:
  84.            self.root.destroy()
  85.            messagebox.showwarning("Advertencia", "Los datos introducidos son incorrectos.")
2  Programación / Scripting / Sumar valores de una columna - treeview en: 19 Noviembre 2022, 18:03 pm
Buenas,

Estoy realizando un sistema de venta en el cual introduces un código de articulo en el que viene su nombre y precio, ej: Peras 1,99€

He echo un Treeview, y de momento todo bien me muestra los datos todo bien, pero ahora llega el momento de tener que sumar los valores de la columna precio para saber el total del inventario y no consigo hacerlo que se sume, obtengo el precio de dicho precio y me lo muestra pero no me suma el precio nuevo introducido con el anterior introducido, en plan: ingreso peras 2€, ingreso manzana 3€, pues obtengo el precio individual, y yo lo que quiero obtener es el total que sería 5€.

Si me pudiesen orientar o cualquier información adiciona lo agradecería.

Con esto introduzco los datos a treeview desde la base de datos:

Código
  1. for self.x2 in self.r_codigo:
  2. print (self.x2["nombre"], self.x2["talla"], self.x2["precio"]+"€")
  3. self.tree.insert('', 'end', text=self.x2["nombre"], values=(self.x2["talla"],self.x2["precio"]))
  4.  
  5. print(self.x2["fecha"])
  6. for self.item in self.tree.get_children():
  7. self.total = 0
  8. self.celda = int(self.tree.set(self.item,"col2"))
  9. self.total += self.celda
  10. print(self.total)


y este es el treeview:

Código
  1. self.tree = ttk.Treeview(self.pagina1,columns=("col1","col2"), height=50)
  2. self.tree.grid(column=0, row=2, padx=50, pady=100)
  3.  
  4. ### COLUMNAS ###
  5. self.tree.column("#0",width=250)
  6. self.tree.column("col1",width=150, anchor=CENTER)
  7. self.tree.column("col2",width=150, anchor=CENTER)
  8.  
  9. ### NOMBRES COLUMNAS ###
  10. self.tree.heading("#0", text="Articulo", anchor=CENTER)
  11. self.tree.heading("col1", text="Talla", anchor=CENTER)
  12. self.tree.heading("col2", text="Precio", anchor=CENTER)


Todo me funciona correctamente, lo único es que no consigo hacer el total de los precios introducidos en la columna precios.

Saludos!
3  Programación / Scripting / Re: Problema con Clases y Funciones POO (Python) 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.
4  Programación / Scripting / 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!
5  Programación / Scripting / Re: Problema con ttk.Label en POO (python) en: 20 Enero 2022, 22:29 pm
Hola buenas tardes, el error que obtienes es por una mala indentacion de una línea de tu código, justamente en la línea que da error, para solucionarlo debes reemplazar esta línea:

Código
  1.        self.label1 = ttk.Label(text="Usuario:").place(x=50, y=110)
  2.  

Por ésta:

Código
  1.            self.label1 = ttk.Label(text="Usuario:").place(x=50, y=110)
  2.  

Simplemente antes de la instrucción de la línea que acabo de dejar, debes dejar 4 espacios o una tabulación.

Prueba esa modificación y nos comentas.


Saludos

Sí, asi es correcto. Ya todo funciona bien.

No sabia que una cosa así de tonta me diera tanto quebradero de cabeza vaya.

Muchas gracias y disculpa las molestias ocasionada por esta tontería.

Saludos.
6  Programación / Scripting / Problema con ttk.Label en POO (python) en: 20 Enero 2022, 19:49 pm
Hola, buenas a tod@s

Estoy haciendo código POO y tengo algún problema, he buscado en internet y supuestamente lo estoy haciendo bien. Pero me da error y no me ejecuta.

Tengo esto:

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.  
  7. class Aplicacion:
  8. def __init__(self):
  9. self.ventana1 = Tk()
  10. self.ventana1.title("Login")
  11. self.ventana1.geometry("400x400")
  12. self.imagenLogo = PhotoImage(file="logo2.png")
  13. self.divLogo = Label(self.ventana1, image=self.imagenLogo)
  14. self.divLogo.place(x=93, y=0)
  15. self.x_ventana = self.ventana1.winfo_screenwidth() // 2 - 300 // 2
  16. self.y_ventana = self.ventana1.winfo_screenheight() // 2 - 300 // 2
  17. self.posicion = str(300) + "x" + str(300) + "+" + str(self.x_ventana) + "+" + str(self.y_ventana)
  18. self.ventana1.geometry(self.posicion)
  19. self.ventana1.resizable(0,0)
  20.  
  21. self.formulario()
  22.  
  23.  
  24.  
  25. self.ventana1.mainloop()
  26.  
  27. def formulario(self):
  28. ### Formulario de Entrada ###
  29.        self.label1 = ttk.Label(text="Usuario:").place(x=50, y=110)
  30.  
  31.  
  32.  
  33. Ventana = Aplicacion()

Lo que quiero es insertar un Label de tkinter en la ventana gráfica desde una función.
Pero me da este erro en sublime text:

Código:
  File "/Users/tomas/Downloads/DonMovil/objetos.py", line 29
    self.label1 = ttk.Label(text="Usuario:").place(x=50, y=110)
TabError: inconsistent use of tabs and spaces in indentation
[Finished in 47ms with exit code 1]
[cmd: ['python3', '-u', '/Users/tomas/Downloads/DonMovil/objetos.py']]
[dir: /Users/tomas/Downloads/DonMovil]
[path: /Library/Frameworks/Python.framework/Versions/3.10/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin]


Cualquier información adicional lo agradeceria.
Saludos!
7  Programación / Scripting / Re: Mostrar datos en ListBox en: 31 Diciembre 2021, 10:59 am
SOLUCIONADO

Código
  1. productos = [articulo["nombre"]]

Sólo era eso. Gracias y disculpen las molestias.

FELIZ AÑO NUEVO A TOD@S
8  Programación / Scripting / Mostrar datos en ListBox en: 30 Diciembre 2021, 21:43 pm
Hola buenas, felices fiestas

Estoy intentando crear un Listbox con datos de una base de datos.

Hasta hay todo bien. El único problema es a la hora que muestro un nombre en la lista.
En la base de datos ejemplo esta -> Nombre: Pepe Palote , pues en el Listbox en vez de salirme en la misma linea Pepe Palote, me aparece Pepe, y abajo Palote, como si fuera 2 datos diferentes, cuando solo es 1 dato único.

Tengo esto:

Código
  1. row7 = [item['nombre'] for item in items]
  2.  
  3.    for articulo in items:
  4.        print (articulo["precio"])
  5.  
  6.  
  7.  
  8.    productos = articulo["texto"]
  9.    productosvar = StringVar()
  10.  
  11.    l = Listbox(gestionOK, listvariable=productosvar)
  12.    l.place(width=200, height=300, x=20, y=30)
  13.  
  14.    productosvar.set(productos)

Quiero que salga 1 sola selección así:
Pepe Palote

y no así:

Pepe
Palota

Y son 2 selecciones, cuando debería ser 1. por que en la base de datos nombre tengo: Pepe Palote

Cualquier información adicional lo agradecería. Gracias.
9  Programación / Scripting / Re: Problema con tk.Entry y .Get() en: 28 Diciembre 2021, 20:13 pm
Saludos,

Al hacer el .grid pierdes el valor de retorno y tu variable queda vacía, debes hacer el .grid después de crear tu widget a no ser que no quieres guardar el widget en una variable por que no se requiere manipularla luego, por ejemplo con tu Button

Por otro lado también veo que has creado un StringVar() pero no lo estás usando donde debes o quizá no entiendo bien como lo quieres usarlo para mostrar su valor

Te presento el siguiente ejemplo funcional:

Código
  1. from tkinter import *
  2. root = Tk()
  3.  
  4. v1 = StringVar()
  5.  
  6. e1 = Entry(root, textvariable=v1)
  7. e1.grid(column=3, row=70, sticky=W)
  8.  
  9. def show() :
  10.  print(v1.get())
  11.  
  12. Button(text="Obtener info", command=show).grid(column=3, row=3, sticky=W)
  13.  
  14. root.mainloop()

Muchas gracias, me ha resuelto el problema y ayudado a entenderlo.
Lo sencillo que era realmente, simplemente estaba mal colocado, pero aun así probe ejemplos de intenert y aun así me daba error, no llegaba a un punto.

Gracias por explicármelo, ya entiendo algo más a la hora de ejecución.

Nuevamente gracias y FELICES FIESTAS!!
10  Programación / Scripting / Problema con tk.Entry y .Get() en: 27 Diciembre 2021, 20:31 pm
Buenas,

Tengo un problema con obtener la información de un Entry (Tkinter), con .get()
Me he llevado todo el día mirando y probando ejemplos de internet, ya que hay mucha documentación sobre ello y eso solo obtener la información que se mete en el entry y mostrarlo, nada del otro mundo, pero después de todo el día probando cosas y ejemplos de internet, me lanza error al .get() y no se por que,

yo tengo esto:
Código
  1. def prueba():
  2.    ttk.Label(text=name).grid(column=3, row=70, sticky=W)
  3.    print (name)
  4.  
  5. v1 = StringVar()
  6.  
  7. e1 = ttk.Entry(root, textvariable=v1).grid(column=3, row=3, sticky=W)
  8.  
  9. def show():
  10.    print (e1.get(e1))
  11.    e1.delete(0, "end")
  12.  
  13.  
  14. ttk.Button(text="Obtener informacion", command=show).grid(column=3, row=5, sticky=W)
  15. ttk.Button(text="Abandonar", command=root.quit).grid(column=3, row=7, sticky=W)

Y lo que quiero es escribir en el entry(box) y al pulsar el botón mostrar lo que hay escrito. Nada del otro mundo, pero no se por que me da error,

este:
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/RegistroDeTienda/main.py", line 124, in show
    print (e1.get(e1))
AttributeError: 'NoneType' object has no attribute 'get'
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/RegistroDeTienda/main.py", line 124, in show
    print (e1.get(e1))
AttributeError: 'NoneType' object has no attribute 'get'


¿Cual es el problema una librería o como?

Una cosa más como podría hacer que una condición IF se ejecutara al pulsar el botón? ¿creo una clase y hay no?

Cualquier información adicional lo agradecería.

Saludos y FELIZ NAVIDAD
Páginas: [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 49
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines