带有 on_hover 事件的 ipyleaflet,Marker.on_mouseover

ipyleaflet with on_hover event, Marker.on_mouseover

我刚刚从 scipy 2020 教程中学习了 ipyleaflet。在教程示例中,我看到了通过 GeoJSON 在 ipyleaflet 上进行悬停事件的可能性。谁能告诉我如何在 Marker 上设置悬停事件?

下面是我的测试。

m = Map(
    basemap=basemaps.CartoDB.DarkMatter,
    center = center,
    zoom = zoom,
    interpolation='nearest'
)

icon1 = AwesomeIcon(
    name = 'paper-plane-o',
    marker_color='red',
    icono_color='black',
    icon_size=(2,2),
    spin=False
)

marker = Marker(icon=icon1,
    name = glider_mission.split('/')[-1],
    location = ([27.19,-82.79]),
    draggable=False,
    opacity=0.5,
    rise_on_hover=True,
)

html = HTML()
def update_html(marker,**kwargs):
    html.value = '''
        <b>Glider Mission:</b><br>
        {}
    '''.format(marker.name)
marker.on_mouseover(update_html(marker))
m.add_layer(marker)
m

Jupyter Lab 给我报错,比如

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
TypeError: 'NoneType' object is not callable

marker.on_mouseover 方法将回调函数作为参数。此处您调用 update_html(marker),其中 returns None,这意味着您调用 marker.on_mouseover(None),因此出现错误消息。

你要做的是:

def get_callback(marker, html):
    def callback(*args, **kwargs):
        html.value = '''
            <b>Glider Mission:</b><br>
            {}
        '''.format(marker.name)

    return callback

marker.on_mouseover(get_callback(marker, html))

get_callback returns 回调函数(可调用),因此 on_mouseover 方法不会再报错了。