我试图从线程内部清除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发布于 2020-09-28 13:35:53
根据文档,您似乎使用了正确的调用。
避免意外的最好方法是不要在多个线程生成输出的上下文中使用输出小部件的上下文管理器。
然而,我从一个后台线程中经历了同样的问题。我确实手动将输出设置为一个看似有效的空列表(虽然我不确定它是否干扰了ipywidgets跟踪更新的内部状态):
output.outputs = [] # instead of output.clear_output()https://stackoverflow.com/questions/63319165
复制相似问题