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.

Botón de widget de IPython que actualiza una tabla.

Estoy teniendo problemas con un código simple.

Estoy usando jupyterlab y tengo una celda que crea un widget con 3 botones. Luego ejecuta la función “modelo”:

from ipywidgets import *

wid = interactive(modelo, months=widgets.ToggleButtons(options=['3m','6m','9m'], description='meses'))

display(wid)

La función modelo devuelve un dataframe llamado pred_df.

Luego tengo otra celda donde tengo el problema. Quiero tener un botón que actualiza la visualización del dataframe.

button = widgets.Button(description="Actualizar")

display(button)

def on_button_clicked(b):
    pred_df = wid.result
    pred_df = pred_df.sort_values(by='Rendimientos pronosticados', ascending=False)
    print(pred_df.head(10))

button.on_click(on_button_clicked)

El problema aquí, creo, es que la visualización imprime el botón sobre el método print, por lo que aún se muestra en el registro de la consola.

¿Hay alguna forma de resolver esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes borrar el área de salida antes de imprimir el dataframe. Puedes usar la función clear_output() del módulo IPython.display para hacerlo. Así es como puedes modificar tu código para lograrlo:

    from IPython.display import clear_output
    
    button = widgets.Button(description="Actualizar")
    display(button)
    
    output_area = widgets.Output()
    display(output_area)
    
    def on_button_clicked(b):
        with output_area:
            clear_output(wait=True)
            pred_df = wid.result
            pred_df = pred_df.sort_values(by='Predicted returns', ascending=False)
            print(pred_df.head(10))
    
    button.on_click(on_button_clicked)
    

    Los cambios que hice arriba son:
    – Importé la función clear_output del módulo IPython.display.
    – Creé un nuevo widget llamado output_area y lo mostré debajo del botón.
    – Envolví la instrucción de impresión dentro de un bloque with para dirigir la salida al output_area.
    – Añadí la función clear_output para borrar el output_area antes de imprimir el dataframe, y establecí wait=True para evitar parpadeos.

Comments are closed.