使用来自 ipyleaflet 的 Popus 的 add_layer 实现 Python 的闪亮

MYa*_*208 5 html python ipyleaflet py-shiny

中使用from m.add_layeripyleaflet Popus(如此。但是,它并没有按预期工作。我的最小工作示例如下:

from shiny import App, render, ui
from shinywidgets import output_widget, reactive_read, register_widget
from ipywidgets import HTML
from ipyleaflet import Map, Marker, Popup

app_ui = ui.page_fluid(
    output_widget("m")
    )


def server(input, output, session):
    center = (52.204793, 360.121558)
    m = Map(center=center, zoom=9, close_popup_on_click=False)
    message1 = HTML()
    message1.value = "Try clicking the marker!"

# Popup with a given location on the map:
    popup = Popup(
    location=center,
    child=message1,
    close_button=False,
    auto_close=False,
    close_on_escape_key=False
    )
    
    m.add_layer(popup) # This line is not working
    register_widget("m", m)

app = App(app_ui, server)
Run Code Online (Sandbox Code Playgroud)

想知道我在这里缺少什么基本内容吗?

小智 -1

看起来该m.add_layer(popup)行不起作用,因为您尝试使用 ipyleafletMap对象作为 Shiny 小部件,但 Shiny 无法识别它。相反,您可以使用output_widgetfrom 函数shinywidgets从 ipyleaflet 对象创建一个 Shiny 小部件Map,然后使用该add_layer方法将弹出窗口添加到地图;

from shiny import App, render, ui
from shinywidgets import output_widget, reactive_read, register_widget
from ipywidgets import HTML
from ipyleaflet import Map, Marker, Popup

app_ui = ui.page_fluid(
    output_widget("m")
)


def server(input, output, session):
    center = (52.204793, 360.121558)
    m = Map(center=center, zoom=9, close_popup_on_click=False)
    message1 = HTML()
    message1.value = "Try clicking the marker!"

    # Popup with a given location on the map:
    popup = Popup(
        location=center,
        child=message1,
        close_button=False,
        auto_close=False,
        close_on_escape_key=False
    )

    m.add_layer(popup)

    output.m = output_widget("m", width="100%", height="500px")
    register_widget("m", m)

app = App(app_ui, server)
Run Code Online (Sandbox Code Playgroud)