【问题标题】:Clear previous output of widget every time it runs每次运行时清除小部件的先前输出
【发布时间】:2020-05-29 08:06:44
【问题描述】:

我想在重新运行小部件时清除之前的输出。

例如

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])

【问题讨论】:

  • NameError: name 'button' is not defined

标签: python jupyter ipywidgets


【解决方案1】:

这行得通


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])

【讨论】:

    【解决方案2】:

    看起来你正在运行 ipython 3.8... 那是 5 岁。我强烈建议升级到更高版本,但完全理解这并不总是可能的,具体取决于时间和资源。

    这是 ipython 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)

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多