【问题标题】:Container as tooltip doesn't show contents作为工具提示的容器不显示内容
【发布时间】:2019-06-18 19:22:45
【问题描述】:

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

以下工作完美:

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])

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

将鼠标悬停在每个点上显示其content 就好了。

但是,我不想简单地显示原始内容。相反,我想以表格形式显示它(但默认的 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])

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

【问题讨论】:

    标签: python ipywidgets bqplot


    【解决方案1】:

    我认为对于您正在尝试实现的目标,您最好使用 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() 方法。

    【讨论】:

    • 是的,我当前的解决方法正是一个ipy.HTML 小部件,我用表格对其进行了硬编码。我不知道df.to_html,将检查它,并将查看工具提示在包装在ipw.Output 中时的外观(今天无法访问代码)。
    • 很遗憾,这不起作用。即使我将标签更改为简单的ipw.Label('A'),我也会得到一个空白(但非零大小)的工具提示。 See this screenshot.
    • 您使用的是哪个版本的 ipywidgets 和 bqplot?
    • ipywidgets 7.3.2 和 bqplot 0.11.4
    • 我正在使用 ipywidgets 7.4.2 和 bqplot 0.11.4。我正在使用 Chrome 浏览器,不知道这是否会有所不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    相关资源
    最近更新 更多