En la celda jupyter, tengo el siguiente código y puedo ver que funciona con "¡Hola mundo!" impreso en la consola de Chrome.
from IPython.display import Javascript my_js = """ console.log('hello world!'); """ Javascript(my_js)Ahora, creo un botón en jupyter y muevo esa función al evento de clic de botón. Ahora, cuando hago clic en el botón, el evento se ejecuta, pero el javascript no funciona y no hay salida en la consola de Chrome:
button = widgets.Button( description='Button', disabled=False, button_style='', tooltip='Button', icon='check' ) def on_button_clicked(b): print("on_button_clicked called") my_js = """ console.log('Hello world2!'); """ Javascript(my_js) print("on_button_clicked call ended") button.on_click(on_button_clicked) display(button)ingrese la descripción de la imagen aquí
¿Alguna idea? Gracias.
Está creando un objeto de la clase Javascript , pero luego lo descarta (ya que no lo está asignando a ninguna variable ni lo está mostrando). Esto funciona con su primer uso de Javascript porque cuando el último resultado de una celda de IPython no se asigna a una variable, se mostrará automáticamente; esto también significa que puede omitir la llamada a display() al mostrar un botón (si es la última línea de la celda):
button = widgets.Button( description='Button', disabled=False, button_style='', tooltip='Button', icon='check' ) button.on_click(on_button_clicked) # notice lack of `display()` call: button pero no funciona si el objeto a mostrar está dentro de la devolución de llamada de la función, porque IPython no sabe qué expresiones mostrar y cuáles ignorar. Los objetos Javascript deben mostrarse para que su navegador ejecute el código JavaScript. Para que funcione:
display explícitamente en el objeto Javascript , yPor ejemplo, la celda 1:
out = widgets.Output(layout={'border': '1px solid black'}) outY entonces:
def on_button_clicked(b): my_js = """ console.log('Hello world2!'); """ with out: display(Javascript(my_js)) display(Markdown("on_button_clicked called"))