ipywidgets clear_output()第二次使用不起作用

时间:2019-10-14 16:41:54

标签: python ipywidgets

我在Output的{​​{1}}小部件中遇到了奇怪的行为。我将以下代码复制到jupyter笔记本中:

ipywidgets

在另一个单元格中,我输入

import ipywidgets as widgets

def clear_output():
    change_output_button = widgets.Button(description="Change output?")
    the_output = widgets.Output()
    clear_output_widget = widgets.VBox([change_output_button, the_output])
    clear_output_widget.click_count = 0

    def button_clicked(_button):
        clear_output_widget.click_count += 1
        the_output.clear_output()
        the_output.append_stdout(f"button clicked {clear_output_widget.click_count} times.")

    change_output_button.on_click(button_clicked)

    return clear_output_widget

将按预期显示按钮。

下面是我得到的输出顺序:

  • 点击1
clear_output()
  • 点击2
button clicked 1 times.
  • 点击3
button clicked 1 times.button clicked 2 times.
  • 点击4
button clicked 3 times.

以此类推...

我不了解click 2行为。我在做错什么吗?

以下是我的关于Jupyter Notebook 信息:

服务器信息: 您正在使用Jupyter笔记本。

笔记本服务器的版本为: 6.0.1 服务器正在此版本的Python上运行:

button clicked 4 times.

当前内核信息:

Python 3.7.4 (default, Aug  9 2019, 18:22:51) [MSC v.1915 32 bit (Intel)]

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这似乎是由于使用append_stdout而不是上下文管理器。可能是缓冲问题。

在此期间,您可以执行以下操作:

import ipywidgets as widgets


def clear_output():
    change_output_button = widgets.Button(description="Change output?")
    the_output = widgets.Output()
    clear_output_widget = widgets.VBox([change_output_button, the_output])
    clear_output_widget.click_count = 0

    def button_clicked(_button):
        clear_output_widget.click_count += 1
        the_output.clear_output()
        with the_output:
            print(f"button clicked {clear_output_widget.click_count} times.")


    change_output_button.on_click(button_clicked)

    return clear_output_widget