es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo tener diferentes funciones en un solo botón con tkinter en Python?

Estoy intentando crear un botón de investigación con diferentes funciones de SQL.
El problema es que el botón solo funciona con una función de SQL, no más.
Aquí está mi código para el botón:

research_button = Button(app, text="Rechercher", command=lambda:[self.surface_result(), self.eppaisseur_moy_result()])
research_button.grid(row=4, column=0, padx=10, pady=10)

Aquí está mi código para las funciones:

def surface_result(self):
    cursor.execute("SELECT helicopter_surface_mouille FROM Helicopter")
    row = cursor.fetchone()
    for x in row:
        surface_result_label = Label(app, text=x, background='white')
        surface_result_label.grid(row=5, column=1, sticky=W)

def eppaisseur_moy_result(self):
    cursor.execute("SELECT produitp_epaisseur_moy FROM ProduitP")
    row2 = cursor.fetchone()
    for x in row2:
        epaisseur_seche_moy_result_label = Label(app, text=x, background='white')
        epaisseur_seche_moy_result_label.grid(row=6, column=1, sticky=W)

La primera función funciona, pero la segunda no y tengo el siguiente error:
mysql.connector.errors.InternalError: Se encontró un resultado no leído.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error “Unread result found” significa que hay un conjunto de resultados que aún no ha sido leído de una consulta previa de MySQL. En este caso, dado que la primera función está funcionando y la segunda no, puede ser que la primera consulta esté devolviendo múltiples filas mientras que la segunda consulta está devolviendo solo una fila.

    Para solucionar este problema, puedes intentar agregar una llamada al método cursor.fetchall() a cada función para leer todos los resultados antes de pasar a la siguiente consulta. Aquí tienes una versión actualizada del código:

    def surface_result(self):
        cursor.execute("SELECT helicopter_surface_mouille FROM Helicopter")
        rows = cursor.fetchall()   # leer todos los resultados
        for x in rows:
            surface_result_label = Label(app, text=x[0], background='white')
            surface_result_label.grid(row=5, column=1, sticky=W)
    
    def eppaisseur_moy_result(self):
        cursor.execute("SELECT produitp_epaisseur_moy FROM ProduitP")
        rows = cursor.fetchall()   # leer todos los resultados
        for x in rows:
            epaisseur_seche_moy_result_label = Label(app, text=x[0], background='white')
            epaisseur_seche_moy_result_label.grid(row=6, column=1, sticky=W)
    

    Ten en cuenta que necesitarás acceder al primer elemento de cada fila usando x[0] ya que fetchall() devuelve una lista de tuplas que contienen los resultados.

Comments are closed.