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

Posted

技术标签:

【中文标题】Ipywidgets (Vbox) 没有出现在 Jupyter 笔记本上【英文标题】:Ipywidgets (Vbox) not showing up on Jupyter notebook 【发布时间】:2021-05-27 23:02:18 【问题描述】:

我遇到了这个错误

A Jupyter widget could not be displayed because the widget state could not be found. This could happen if the kernel storing the widget is no longer available, or if the widget state was not saved in the notebook. You may be able to create the widget by running the appropriate cells.

当我跑步时:

import plotly.graph_objs as go
import plotly.offline as py

import pandas as pd
import numpy as np
from ipywidgets import interactive, HBox, VBox

py.init_notebook_mode()

df = pd.read_csv('https://raw.githubusercontent.com/jonmmease/plotly_ipywidget_notebooks/master/notebooks/data/cars/cars.csv')

f = go.FigureWidget([go.Scatter(y = df['City mpg'], x = df['City mpg'], mode = 'markers')])
scatter = f.data[0]
N = len(df)
scatter.x = scatter.x + np.random.rand(N)/10 *(df['City mpg'].max() - df['City mpg'].min())
scatter.y = scatter.y + np.random.rand(N)/10 *(df['City mpg'].max() - df['City mpg'].min())
scatter.marker.opacity = 0.5

def update_axes(xaxis, yaxis):
    scatter = f.data[0]
    scatter.x = df[xaxis]
    scatter.y = df[yaxis]
    with f.batch_update():
        f.layout.xaxis.title = xaxis
        f.layout.yaxis.title = yaxis
        scatter.x = scatter.x + np.random.rand(N)/10 *(df[xaxis].max() - df[xaxis].min())
        scatter.y = scatter.y + np.random.rand(N)/10 *(df[yaxis].max() - df[yaxis].min())

axis_dropdowns = interactive(update_axes, yaxis = df.select_dtypes('int64').columns, xaxis = df.select_dtypes('int64').columns)

# Create a table FigureWidget that updates on selection from points in the scatter plot of f
t = go.FigureWidget([go.Table(
    header=dict(values=['ID','Classification','Driveline','Hybrid'],
                fill = dict(color='#C2D4FF'),
                align = ['left'] * 5),
    cells=dict(values=[df[col] for col in ['ID','Classification','Driveline','Hybrid']],
               fill = dict(color='#F5F8FF'),
               align = ['left'] * 5))])

def selection_fn(trace,points,selector):
    t.data[0].cells.values = [df.loc[points.point_inds][col] for col in ['ID','Classification','Driveline','Hybrid']]

scatter.on_selection(selection_fn)

# Put everything together
VBox((HBox(axis_dropdowns.children),f,t))

ft 仅在我运行 f.show()t.show() 时显示

当我跑步时:

import ipywidgets as widgets
from IPython.display import display

button = widgets.Button(description='Hello')
display(button)

小部件显示良好。我已经在线阅读了解决方案并尝试了:

jupyter nbextension enable --py widgetsnbextension

jupyter labextension install @jupyter-widgets/jupyterlab-manager

当我检查时:

jupyter nbextension list

一切似乎都很好:

Known nbextensions:
  config dir: /home/hajar/.jupyter/nbconfig
    notebook section
      jupyter-js-widgets/extension  enabled 
      - Validating: OK
  config dir: /usr/local/etc/jupyter/nbconfig
    notebook section
      jupyter-js-widgets/extension  enabled 
      - Validating: OK
    tree section
      ipyparallel/main  enabled 
      - Validating: problems found:
        - require?  X ipyparallel/main
  config dir: /etc/jupyter/nbconfig
    notebook section
      jupyter-js-widgets/extension  enabled 
      - Validating: OK

所以我有点困惑为什么它不显示 Vbox 的结果。 我正在使用 Jupyter 笔记本。

版本列表:

jupyter core     : 4.6.3
jupyter-notebook : 6.0.3
qtconsole        : 5.0.1
ipython          : 7.13.0
ipykernel        : 5.2.0
jupyter client   : 6.1.2
jupyter lab      : 3.0.9
nbconvert        : 5.6.1
ipywidgets       : 7.0.0
nbformat         : 5.0.4
traitlets        : 4.3.3

【问题讨论】:

【参考方案1】:

已解决- 用于渲染 FigureWidget 的 plotlywidgets 未正确安装。

我用jupyter nbextension install --py plotlywidget --user 然后jupyter nbextension enable plotlywidget --user --py

【讨论】:

plotlywidgt 扩展仅适用于较旧的 plotly 版本(例如版本 4.14.3)。较新的 plotly 版本(例如 5.x 版)已不存在。

以上是关于Ipywidgets (Vbox) 没有出现在 Jupyter 笔记本上的主要内容,如果未能解决你的问题,请参考以下文章

python 没有任何额外依赖关系的ipywidgets的文件选择类构建。

ipywidgets:如何在两列中组织滑块

关于ipywidgets插件,错误'Widget Javascript not detected. It may not be installed or enabled properly.&

ipywidgets Textarea on_submit()

为啥vbox下host-only无法设置

如何让 ipywidgets 在 Jupyter Lab 中工作?