Jupyter Ipywidgets 在显示和刷新时行为不一致

Posted

技术标签:

【中文标题】Jupyter Ipywidgets 在显示和刷新时行为不一致【英文标题】:Jupyter Ipywidgets behave Inconsistently when displaying and refreshing 【发布时间】:2018-01-17 15:53:26 【问题描述】:

我制作了一个显示一些图表和数据框的 jupyter 笔记本。然后我可以更改小部件值以刷新数据框和图表。

我遇到了两个问题:

    每次我在打开 Jupyter notebook 后第一次运行这本书时,都会得到这个:

然而,当我再次运行所有单元格时,我得到了所需的输出:

    每次我使用小部件并进行更改时,笔记本最终都会正确刷新,但由于某种原因它不断输出前几张图,似乎清除了输出,然后再次显示它们,然后清除输出,然后这样的几次迭代,就能够显示一切。这是我的事件处理程序:

    def handle_submit(sender):
        clear_output(wait=True)
    
        start = w.slider_start.value.strftime('%Y-%m-%d')
        end = w.slider_end.value.strftime('%Y-%m-%d')
    
        zval = z.value
        yval = y.value
        xval = x.value
    
        df_dlm,df_dgo,df_stats = show_stats(zval,yval,xval,start,end)
        df_e = show_stats_exp(zval,yval,xval,start,end)
    
        display_dataframe(df_stats)
        plot_lines_e(df_e)
        dfx = prepare_data(df_dlm,df_dgo)
        plot_lines(dfx)
        plot_scatter(dfx)
    

display_dataframeplot_linesplot_scatter 函数在其中都有一个“显示”类型的行来实际显示图形,因为 %matplotlib inline 不能很好地与 ipywidgets 配合使用......感觉就像这样与它有关,但不知道如何解决这个问题。

仅供参考,这些图表是在 Bokeh 中完成的,某些数据帧是在 matplotlib 对象上绘制的。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

该警告只是一个错误,我认为应该在下一版本的 ipywidgets 中修复。与此同时,您唯一能做的就是在加载或重新加载笔记本后等待约 10-20 秒,“受信任”框出现在右上角,如下图所示;

仅在看到该框出现后尝试执行所有代码。

【讨论】:

以上是关于Jupyter Ipywidgets 在显示和刷新时行为不一致的主要内容,如果未能解决你的问题,请参考以下文章

与 Jupyter Notebook、Lab、extensions 和 ipywidgets 混淆

Ipywidgets (Vbox) 没有出现在 Jupyter 笔记本上

如何让 ipywidgets 在 Jupyter Lab 中工作?

Jupyter/ipywidgets 在两个级别上对数据帧进行排序

解决报错ImportError: IProgress not found. Please update jupyter and ipywidgets

解决报错ImportError: IProgress not found. Please update jupyter and ipywidgets