0

如何覆盖 Jupyter 输出小部件打印的字符串?

例如,我知道如何使用简单的print语句来做到这一点:

from IPython.display import display, clear_output


fruits = ["apple", "orange", "kiwi"]

for fruit in fruits:
    clear_output()
    print(f"Do you like {fruit}s?")

产生我所期望的:字符串为每个 new 打印一次fruit,覆盖前一个字符串。在我的示例中,最后打印的语句是Do you like kiwis?.

但我需要使用输出小部件而不是打印语句来做到这一点。我试过了:

import ipywidgets as widgets


out = widgets.Output()

for fruit in fruits:
    out.clear_output()
    out.append_stdout(f"Do you like {fruit}s?")

out

我得到:Do you like apples?Do you like oranges?Do you like kiwis?,这不是我想要的!

out.clear_output()我也尝试在之后放置append_stdout,我得到一个空行。在这种情况下,似乎每个字符串在打印新字符串之前实际上都被取消了,而且最后一个字符串也被取消了!

我很感激任何建议!

最后说明:这个问题是另一个问题的极简示例,尚未收到答案。如果您需要更多上下文,请随时阅读该问题!

4

1 回答 1

0

感谢官方文档的traitlets章节,我解决了这个极简示例。ipywidgets

out = widgets.Output()

for fruit in fruits_names:
    with out:
        out.clear_output()
        print(f"Do you like {fruit}s?")
out

我仍然不完全理解为什么这会按预期工作,而调用out.clear_output和声明out.append_stdout之外with没有!如果您有解释,请告诉我!

我也仍然对我的另一个更大的问题感兴趣。

于 2021-01-19T16:10:31.223 回答