|
Mostrar Temas
|
Páginas: [1] 2 3 4 5 6 7 8 9
|
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: Exception in Tkinter callback Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/tkinter/__init__.py", line 1948, in __call__ return self.func(*args) ^^^^^^^^^^^^^^^^ File "/Users/tomassanchezgarcia/Desktop/python-test/iniciar_sesion.py", line 84, in validar self.root.destroy() ^^^^^^^^^ AttributeError: 'Login' object has no attribute 'root'
main.py from tkinter import * from tkinter import ttk import tkinter as tk import pymysql from conexion import * from tkinter import messagebox from PIL import Image, ImageTk from iniciar_sesion import Login class AplicacionInventario: def __init__(self): self.root = Tk() self.root.title("StockMaster") self.root.geometry("400x500") #Bloquear agrandar ventana self.root.resizable(0,0) self.wtotal = self.root.winfo_screenwidth() self.htotal = self.root.winfo_screenheight() # Guardamos el largo y alto de la ventana self.wventana = 400 self.hventana = 500 # # Aplicamos la siguiente formula para calcular donde debería posicionarse self.pwidth = round(self.wtotal/2-self.wventana/2) self.pheight = round(self.htotal/2-self.hventana/2) # Se lo aplicamos a la geometría de la ventana self.root.geometry(str(self.wventana)+"x"+str(self.hventana)+"+"+str(self.pwidth)+"+"+str(self.pheight)) self.imagen = Image.open("src/logo.png") self.imagen = self.imagen.resize((350, 100)) # Opcional: Redimensionar la imagen self.imagen = ImageTk.PhotoImage(self.imagen) # Crear un widget Label con la imagen y colocarlo en la ventana self.label_imagen = tk.Label(self.root, image=self.imagen) self.label_imagen.pack(pady=20) self.login1 = Login(self) #fetch_data_button = tk.Button(self.root, text="Obtener Datos", command=self.mostrar2) #fetch_data_button.pack() self.root.mainloop() AplicacionInventario()
iniciar_sesion.py from tkinter import * from tkinter import ttk import tkinter as tk import pymysql from conexion import * from tkinter import messagebox from PIL import Image, ImageTk from test2 import Menus class Login: def __init__(self, app): self.app = app self.t_Email = "Email:" self.label_email = tk.Label(text=self.t_Email) self.label_email.pack(pady=5, padx=20) self.label_email.place(x=150, y=150, width=100, height=20) self.entry_email = tk.Entry() self.entry_email.pack(pady=5) self.entry_email.place(x=75, y=170, width=250, height=50) self.t_Password = "Contraseña:" self.label_password = tk.Label(text=self.t_Password) self.label_password.pack(pady=5, padx=20) self.label_password.place(x=150, y=220, width=100, height=20) self.entry_password = tk.Entry(show="*") self.entry_password.pack(pady=5) self.entry_password.place(x=75, y=240, width=250, height=50) self.login_email = self.entry_email.get() self.login_password = self.entry_password.get() self.boton_login = tk.Button(text="Iniciar Sesión", command=self.validar) self.boton_login.pack(pady=5) self.boton_login.place(x=125, y=300, width=150, height=50) def validar(self): #self.conexion_login = connect_to_database() #self.cursor_conexion_login = self.conexion_login.cursor() #self.cursor_conexion_login.execute("SELECT email, password FROM usuarios WHERE email=%s AND password=%s", (self.login_email, self.login_password)) #self.verificar_login = self.cursor_conexion_login.fetchall() #messagebox.showwarning("Advertencia", self.verificar_login) # Conectarse a la base de datos utilizando la función importada self.connection2 = connect_to_database() self.cursor2 = self.connection2.cursor() # Ejemplo: Ejecutar una consulta para obtener datos self.cursor2.execute("SELECT nombre,password FROM usuarios") self.data2 = self.cursor2.fetchall() #messagebox.showwarning("Advertencia", self.data2) # Cerrar el cursor y la conexión for self.fila in self.data2: self.v_email = self.fila[0] self.v_password = self.fila[1] self.cursor2.close() self.connection2.close() if self.entry_email.get() == "" or self.entry_password.get() == "": self.dialogo = tk.Toplevel() self.dialogo.title("Diálogo Personalizado") self.dialogo.geometry("300x50") self.dialogo.resizable(0,0) self.wtotal2 = self.dialogo.winfo_screenwidth() self.htotal2 = self.dialogo.winfo_screenheight() self.wventana2 = 300 self.hventana2 = 50 self.pwidth2 = round(self.wtotal2/2-self.wventana2/2) self.pheight2 = round(self.htotal2/2-self.hventana2/2) self.dialogo.geometry(str(self.wventana2)+"x"+str(self.hventana2)+"+"+str(self.pwidth2)+"+"+str(self.pheight2)) self.etiqueta = tk.Label(self.dialogo, text="Este es un cuadro de diálogo personalizado.", padx=10, pady=10) self.etiqueta.pack() elif self.entry_email.get() == self.v_email and self.entry_password.get() == self.v_password: #messagebox.showwarning("Advertencia", "PERFECTO COINCIDE") self.ventana_menu = Menus(self) else: self.root.destroy() 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: for self.x2 in self.r_codigo: print (self.x2["nombre"], self.x2["talla"], self.x2["precio"]+"€") self.tree.insert('', 'end', text=self.x2["nombre"], values=(self.x2["talla"],self.x2["precio"])) print(self.x2["fecha"]) for self.item in self.tree.get_children(): self.total = 0 self.celda = int(self.tree.set(self.item,"col2")) self.total += self.celda print(self.total)
y este es el treeview: self.tree = ttk.Treeview(self.pagina1,columns=("col1","col2"), height=50) self.tree.grid(column=0, row=2, padx=50, pady=100) ### COLUMNAS ### self.tree.column("#0",width=250) self.tree.column("col1",width=150, anchor=CENTER) self.tree.column("col2",width=150, anchor=CENTER) ### NOMBRES COLUMNAS ### self.tree.heading("#0", text="Articulo", anchor=CENTER) self.tree.heading("col1", text="Talla", anchor=CENTER) 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 / 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: from tkinter import * from tkinter import ttk import pymysql from tkinter import messagebox as MessageBox from tkinter import scrolledtext as st import conexion class Aplicacion: def __init__(self): self.conexion1 = conexion.conexiones() self.ventana1 = Tk() self.ventana1.title("Login") self.ventana1.geometry("400x400") self.imagenLogo = PhotoImage(file="logo2.png") self.divLogo = Label(self.ventana1, image=self.imagenLogo) self.divLogo.place(x=93, y=0) self.x_ventana = self.ventana1.winfo_screenwidth() // 2 - 300 // 2 self.y_ventana = self.ventana1.winfo_screenheight() // 2 - 300 // 2 self.posicion = str(300) + "x" + str(300) + "+" + str(self.x_ventana) + "+" + str(self.y_ventana) self.ventana1.geometry(self.posicion) self.ventana1.resizable(0,0) self.formulario() self.ventana1.mainloop() def formulario(self): ttk.Label(text="Usuario:").place(x=50, y=110) ttk.Label(text="Contraseña:").place(x=50, y=165) self.formUsuarioString = StringVar() self.formUsuario = Entry(self.ventana1, textvariable=self.formUsuarioString) self.formUsuario.place(x=50, y=130, width=200, height=30) self.formPasswordString = StringVar() self.formPassword = Entry(self.ventana1, textvariable=self.formPasswordString) self.formPassword.place(x=50, y=185, width=200, height=30) botonAcceder = Button(self.ventana1, text="Acceder", command=self.login) botonAcceder.place(x=75, y=240, width=150, height=30) def login(self): datos = (self.formUsuarioString.get(), self.formPasswordString.get()) self.conexion1.verificar(datos) Ventana = Aplicacion()
y luego en el archivo conexión.py tengo eso: import pymysql class conexiones: def conexion(self): conexion2 = pymysql.connect(host='null', user='myadmin', password='null', database='python', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) def verificar(self, datos): con1 = self.conexion() cur = con1.cursor() sql = "SELECT * FROM trabajador WHERE nombre='{}' AND password='{}'".format(self.formUsuarioString.get(), self.formPasswordString.get()) cur.execute(sql) comprobardatosAcceso=cur.fetchall()
y este es el error que me da cuando intento hacer la consulta: 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!
|
|
|
4
|
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: from tkinter import * from tkinter import ttk import pymysql from tkinter import messagebox as MessageBox from tkinter import scrolledtext as st class Aplicacion: def __init__(self): self.ventana1 = Tk() self.ventana1.title("Login") self.ventana1.geometry("400x400") self.imagenLogo = PhotoImage(file="logo2.png") self.divLogo = Label(self.ventana1, image=self.imagenLogo) self.divLogo.place(x=93, y=0) self.x_ventana = self.ventana1.winfo_screenwidth() // 2 - 300 // 2 self.y_ventana = self.ventana1.winfo_screenheight() // 2 - 300 // 2 self.posicion = str(300) + "x" + str(300) + "+" + str(self.x_ventana) + "+" + str(self.y_ventana) self.ventana1.geometry(self.posicion) self.ventana1.resizable(0,0) self.formulario() self.ventana1.mainloop() def formulario(self): ### Formulario de Entrada ### self.label1 = ttk.Label(text="Usuario:").place(x=50, y=110) 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: 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!
|
|
|
5
|
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: row7 = [item['nombre'] for item in items] for articulo in items: print (articulo["precio"]) productos = articulo["texto"] productosvar = StringVar() l = Listbox(gestionOK, listvariable=productosvar) l.place(width=200, height=300, x=20, y=30) 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.
|
|
|
6
|
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: def prueba(): ttk.Label(text=name).grid(column=3, row=70, sticky=W) print (name) v1 = StringVar() e1 = ttk.Entry(root, textvariable=v1).grid(column=3, row=3, sticky=W) def show(): print (e1.get(e1)) e1.delete(0, "end") ttk.Button(text="Obtener informacion", command=show).grid(column=3, row=5, sticky=W) 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: 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
|
|
|
7
|
Programación / Scripting / Consulta MySQL desde una función
|
en: 20 Diciembre 2021, 01:08 am
|
Buenas, tengo un problema duda respecto a insertar datos en la base de datos mediante consultas mysql. Tengo el archivo main.py from tkinter import * from tkinter import ttk from conexion import * ####### FUNCIONES ####### def click(): ttk.Label(mainframe, text="Haz echo CLICK").grid(column=40, row=70, sticky=W) ttk.Button(mainframe, text="BOTON 2", command=click2).grid(column=40, row=90, sticky=W) def click2(): ttk.Label(mainframe, text="POR FIN!!").grid(column=40, row=110, sticky=W) ttk.Button(mainframe, text="BOTON 2").grid(column=40, row=130, sticky=W) def crearCliente(): crearCliente1 = "INSERT INTO test(id,name,email) VALUES ('5','prueba','prueba')" ttk.Label(mainframe, text="Haz creado un cliente").grid(column=40, row=150, sticky=W) ####### VENTANA Tkinter ####### root = Tk() root.title("Mostrar datos") root.geometry("400x400") mainframe = ttk.Frame(root, padding="3 3 12 12") mainframe.grid(column=0, row=0, sticky=(N, W, E, S)) root.columnconfigure(0, weight=1) root.rowconfigure(0, weight=1) ttk.Label(mainframe, text=results).grid(column=3, row=2, sticky=W) ttk.Label(mainframe, text="Probando Label").grid(column=30, row=20, sticky=W) ttk.Button(mainframe, text="BOTON", command=crearCliente).grid(column=40, row=40, sticky=W) root.mainloop()
Y el archivo conexión.py: import pymysql # Abre conexion con la base de datos db = pymysql.connect(host='localhost', user='root', password='root', database='test', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) ################################################## cursor = db.cursor() # Seleccionador base de datos sql = "SELECT name FROM test WHERE id = 2" # Ejecutar comando cursor.execute(sql) # Mostrar results = cursor.fetchall() # Desconexion db.close()
Tengo esto, y funciona bien hasta el sentido de que tengo importado el archivo de conexión en el main (archivo principal) lo cual tengo una variable llamada "results" que se muestra perfectamente en el main, y eso que Estrellas declarada en el archivo conexión. Y ahora estoy intentado crear una consulta a la base de datos en la función CrearCliente de añadir un nuevo dato y no se me añade. No me da ningún error ni nada pero no se crea los datos en la base de datos. ¿que estoy haciendo mal? Cualquier información adicional lo agradeceria. Saludos.
|
|
|
8
|
Programación / Scripting / Mantener ttk.Label en tiempo real
|
en: 19 Diciembre 2021, 18:39 pm
|
Buenas,
Me gustaría saber si es posible mantener actualizado en tiempo real un ttk.Label con el texto que muestre.
Ya que lo tengo mostrando un mensaje de una base de datos externa (PyMysql) y me gustaría por ejemplo yo mismo desde la base de datos cambiar el mensaje y que se cambie en la ventana (label) sin tener que cerrar y abrir la aplicación (ventana) nuevamente.
O hace falta alguna librería en especial para mantener todo los datos que muestra en tiempo real.
Cualquier información adicional lo agradeceria.
Saludos.
|
|
|
9
|
Programación / Programación C/C++ / problema usar WxWidgets en Xcode
|
en: 19 Diciembre 2021, 01:50 am
|
Buenas, me acabo de pasar a Mac, y ahora para programar en c++ quiero usar wxWidgets en Xcode y eso es nuevo para mi.
He mirado la documentación de wx sobre la instalación pero no funciona. ¿como puedo añadir wx a Xcode?
Solo quiero que al incluir el include <wxWidgets> no me salte error, de que no existe
he echo una instalación de wx desde la terminal, y desde hay cree un archivo y un ejecutable y todo bien. Pero yo lo quiero hacer todo desde Xcode.
Cualquier información adicional lo agradecería.
Saludos.
|
|
|
10
|
Programación / Scripting / Problema con Hola mundo en JS
|
en: 27 Septiembre 2021, 23:30 pm
|
Buenas, estoy haciendo esto en un index.php y no me muestra el texto de una variable, ¿por que? si uso document.write("hola mundo"); si se muestra pero no se muestra con innerHTML. Tengo esto, que hago mal, <script type="text/javascript"> var nombre = "Tomas"; document.innetHTML(nombre); document.body.innetHTML = "Hola"; </script> <!DOCTYPE html> <html lang="es" /> <head> <title> Testing javascript </title> <meta charset="UTF-8" /> </head> <body> </body> </html>
|
|
|
|
|
|
|