【发布时间】:2020-08-08 18:55:20
【问题描述】:
我正在尝试从线程内部清除 ipwidget 输出
例如,我想做一个计数到 10 的计数器,在线程中运行,并且只显示当前的数字。
代码
import ipywidgets as widgets
import time
from IPython.display import display, HTML
from concurrent.futures import ThreadPoolExecutor
output = widgets.Output()
display(output)
def my_foo():
for count in range(10):
output.clear_output(wait=True)
output.append_display_data(HTML(f"count {count}"))
time.sleep(1)
with ThreadPoolExecutor() as executor:
executor.submit(my_foo)
期望的输出
上述代码的最终输出应该是
count 9
实际输出
count 0
count 1
count 2
count 3
count 4
count 5
count 6
count 7
count 8
count 9
【问题讨论】:
-
这似乎是由于
Output.append_display_data和Output.clear_output的问题。append_display_data函数在 ipywidgets 线程文档中使用,但似乎不适用于 clear_output。只需忽略使用append_display_data的建议即可修复它... -
我错了,不使用 append_display_data 意味着在使用多个线程和多个输出时会中断
标签: python ipython ipywidgets