我在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
将按预期显示按钮。
下面是我得到的输出顺序:
clear_output()
button clicked 1 times.
button clicked 1 times.button clicked 2 times.
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)]
感谢您的帮助!
答案 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