Очистить предыдущий вывод виджета при каждом его запуске - PullRequest
0 голосов
/ 29 мая 2020

Я хотел бы очистить предыдущий вывод при повторном запуске виджета.

например

from IPython.display import display, clear_output

import ipywidgets as widgets
from datetime import datetime, timedelta
button = widgets.Button(description='RUN',button_style='info')

def on_button_clicked(b):

    # DO SOMETHING #

    out = widgets.Output()
    out.clear_output(wait=True)
    out.append_stdout(f'Ran at {datetime.now()}')
    display(out)

button.on_click(on_button_clicked)
widgets.VBox([button])

Каждый раз, когда я нажимаю кнопку RUN, он «добавляет» оператор печати

Я также пробовал это:

button = widgets.Button(description='RUN',button_style='info')

def on_button_clicked(b):

    # DO SOMETHING #

    out = widgets.Output()
    out.clear_output(wait=True)
    with out:
        print(f'Ran at {datetime.now()}')
    display(out)

button.on_click(on_button_clicked)
widgets.VBox([button])

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Это работает


from IPython.display import display, clear_output

import ipywidgets as widgets
from datetime import datetime, timedelta


button = widgets.Button(description='RUN',button_style='info')

out = widgets.Output() 

@out.capture(clear_output=True)
def on_button_clicked(b):
    # DO SOMETHING #
    print ( f'Ran at {datetime.now()}')


button.on_click(on_button_clicked)
widgets.VBox([button])

0 голосов
/ 31 мая 2020

Похоже, вы используете i python 3.8 ... ему 5 лет. Я настоятельно рекомендую перейти на более позднюю версию, но полностью понимаю, что это не всегда возможно в зависимости от времени и ресурсов.

Вот документация для виджета отображения i python 3.x:
https://ipython.org/ipython-doc/3/api/generated/IPython.display.html#functions

Попробуйте следующее:

from IPython.display import clear_output
import ipywidgets as widgets
from datetime import datetime

button = widgets.Button(description='RUN',button_style='info')

def on_button_clicked(b):
    # DO SOMETHING #
    print(f'Ran at {datetime.now()}')

    # This will clear the cell output the NEXT time the button is pressed
    clear_output(wait=True)

button.on_click(on_button_clicked)
widgets.VBox([button])

Поступали сообщения о «тряске» ноутбука при использовании print(). Если вы заметили это, попробуйте вместо этого использовать print('message', flush=True).

...