Контейнер как всплывающая подсказка не показывает содержимое - PullRequest
1 голос
/ 18 июня 2019

Я создаю диаграмму рассеяния и хочу показать некоторую информацию во всплывающей подсказке.

Идеально работает следующее:

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 просто отлично.

enter image description here

Однако я не хочу просто показыватьсырое содержание.Вместо этого я хочу показать его в табличной форме (но по умолчанию bqp.Tooltip недостаточно для моих нужд).

Однако, если я оберну метку в ipw.VBox, всплывающая подсказка станет крошечнойвертикальная лента.Добавление min_width и min_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

Что нужно сделать, чтобы всплывающая подсказка отображалась правильно?

1 Ответ

0 голосов
/ 20 июня 2019

Я думаю, что для того, что вы пытаетесь достичь, вам лучше использовать виджет Output в качестве всплывающей подсказки, а затем создавать нужные виджеты и отображать их с помощью выходного виджета в качестве диспетчера контекста.

Если вы хотите увидеть, какую дополнительную информацию можно представить, попробуйте напечатать content в вашей функции hover_handler.

    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.Иногда я использую панд для этого с помощью метода df.to_html ().

...