python - 作为工具提示的容器不显示内容

标签 python ipywidgets bqplot

我正在创建散点图,并希望在工具提示中显示一些信息。

以下效果完美:

import bqplot as bqp
import ipywidgets as ipw

xSc = bqp.LinearScale()
ySc = bqp.LinearScale()

tt = ipw.Label("A")
def hover_handler(self, content):
    tt.value = str(content)

s = bqp.Scatter(x=[0, 1, 2], y=[1, 2, 3], scales=dict(x=xSc, y=ySc),
                tooltip=tt)
s.on_hover(hover_handler)
bqp.Figure(marks=[s])

(没有轴之类的东西来保持代码简短)

将鼠标悬停在每个点上都可以很好地显示其内容

enter image description here

但是,我不想简单地显示原始内容。相反,我想以表格形式显示它(但默认的 bqp.Tooltip 不足以满足我的需求)。

但是,如果我将标签包裹在 ipw.VBox 中,工具提示就会变成一个微小的垂直条子。添加 min_widthmin_height 会增加工具提示的大小,但没有内容(即使 tt 是使用默认值创建的)。如果我单独调用来单独显示 VBox,该版本会正常显示(即使没有定义布局),甚至在将鼠标移到点上时会更新。

import bqplot as bqp
import ipywidgets as ipw
from IPython.display import display

xSc = bqp.LinearScale()
ySc = bqp.LinearScale()

tt = ipw.Label("A")
vb = ipw.VBox(children=[tt], layout=ipw.Layout(min_width='100px', min_height='100px'))
display(vb)
def hover_handler(self, content):
    tt.value = str(content)

s = bqp.Scatter(x=[0, 1, 2], y=[1, 2, 3], scales=dict(x=xSc, y=ySc),
                tooltip=vb)
s.on_hover(hover_handler)
bqp.Figure(marks=[s])

enter image description here

我需要做什么才能使工具提示正确显示?

最佳答案

我认为对于您正在尝试实现的目标,最好使用 Output 小部件作为工具提示,然后创建您需要的小部件并使用输出小部件作为上下文管理器来显示它们.

如果您想查看可以显示哪些附加信息,请尝试在 hover_handler 函数中打印 content

    import bqplot as bqp
    import ipywidgets as ipw
    from IPython.display import display, clear_output

    xSc = bqp.LinearScale()
    ySc = bqp.LinearScale()


    out = ipw.Output()

    def hover_handler(self, content):
        out.clear_output()
        with out:
            label = ipw.Label(content['data']['name'])
            display(label)

    s = bqp.Scatter(x=[0, 1, 2], y=[1, 2, 3], scales=dict(x=xSc, y=ySc),
                    tooltip=out)
    s.on_hover(hover_handler)
    bqp.Figure(marks=[s])

要显示信息表,您可能需要一个 ipy.HTML 小部件,您可以使用它来传递 HTML 表。我有时使用 pandas 和 df.to_html() 方法来实现此目的。

关于python - 作为工具提示的容器不显示内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56655741/

相关文章:

python - 将小部件连接到绘图

python - 如何使用 bqplot 在散点图中插入工具提示

python - ipywidgets 小部件值没有改变

javascript - 如何在 Bokeh/Python/Pywidgets 中使一个 slider /小部件更新多个绘图?

jupyter-notebook - 在 bqplot 中动态调整轴

python-3.x - jupyter 实验室中的 Bqplot 返回字符串而不是(交互式)图像

python - 最短路径搜索 - 使用边类型 [NetworkX、igraph]

python - 我想将 pandas DataFrame 中的两列相乘并将结果添加到新列中

python - 按行中非空元素的计数对 PySpark Dataframe 进行统一分区

python - 按每个子列表的第一个元素对列表列表进行排序