python - 在 kivy-Garden-Mapview 的 python 端(不在 kv 文件中)的 MapMarkerPopup 中创建 Popup

标签 python maps kivy

我去了MapView-Doncumentation以及Source code但这似乎没有多大帮助。

我在kv文件中创建了这个模板,以便我可以在 map 中动态创建一个mapmarkerpopup,但是当我尝试这个时,它会创建另一个小部件(这很明显,因为我在load_content方法中做了add_widget,因为我找不到任何其他方式)

这是map_data.kv文件

#:import MapSource kivy.garden.mapview.MapSource
#:import MapMarkerPopup kivy.garden.mapview.MapMarkerPopup

[MakePopup@BoxLayout]:
    MapMarkerPopup:
        lat: ctx.lat
        lon: ctx.lon
        popup_size: 400,400
        Bubble:
            Image:
                source: ctx.image
                mipmap: True
            Label:
                text: ctx.label
                markup: True
                halign: "center"

<Toolbar@BoxLayout>:
    size_hint_y: None
    height: '48dp'
    padding: '4dp'
    spacing: '4dp'

    canvas:
        Color:
            rgba: .2, .2, .2, .6
        Rectangle:
            pos: self.pos
            size: self.size

<Map_Data>:

    Toolbar:
        top: root.top
        #Spinner created to select places.
        Spinner:
            text: "Sydney"
            values: root.map_values.keys()
            on_text:
                if (self.text == 'France'): root.load_content()
                else: pass

    MapView:
        id: mapview
        lat: 28.89335172
        lon: 76.59449171
        zoom: 24

这是main.py文件

class Map_Data(BoxLayout):
    ....
    def load_content(self):
        self.add_widget(Builder.template('MakePopup', lat ='28.89335152',
                lon='76.59449153', image="goku.jpg",label='label'))

这是我从上面的代码中得到的输出。 我希望在 map 上显示该标记enter image description here

现在我们看到mapview有一个函数“add_marker”,但是通过这个方法我无法添加图像和标签。

if (self.text == 'Sydney'): 
    mapview.add_marker(MapMarkerPopup(lat=-33.8670512,lon=151.206))
else: pass

它工作得很好,并在 map 上添加了标记。

但是如何添加图像和标签,即。内容???

mapview.add_marker(MapMarkerPopup(lat=-33.8670512,lon=151.206, content=???))

现在可以通过手动创建来生成预期结果,如https://github.com/kivy-garden/garden.mapview/blob/master/examples/map_with_marker_popup.py

但是动态创建它怎么样??? 如有任何帮助,我们将不胜感激。

编辑1:

我也尝试过这样做。

if (self.text == 'Sydney'): mapview.add_marker(MapMarkerPopup(lat=-33.8670512,
    lon=151.206,popup_size=(400,400)).add_widget(Button(text = "stackoverflow")))

else: pass

但它显示此错误:

marker._layer = self
AttributeError: 'NoneType' object has no attribute '_layer'

最佳答案

自从你问这个问题以来已经有一段时间了,但我最近遇到了同样的问题,也许有人对答案感兴趣。您在其他地方指出了如何动态添加内容( https://github.com/kivy-garden/garden.mapview/issues/5 ),但弹出窗口显示在错误位置的问题仍然存在,您建议需要更改 set_marker_position 方法。将其更改为

def set_marker_position(self, mapview, marker):
    x, y = mapview.get_window_xy_from(marker.lat, marker.lon, mapview.zoom)
    marker.x = int(x - marker.width * marker.anchor_x)
    marker.y = int(y - marker.height * marker.anchor_y)
    if isinstance(marker, MapMarkerPopup):
        marker.placeholder.x = marker.x - marker.width / 2
        marker.placeholder.y = marker.y + marker.height

即添加最后三行对我来说很有效。

关于python - 在 kivy-Garden-Mapview 的 python 端(不在 kv 文件中)的 MapMarkerPopup 中创建 Popup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30862740/

相关文章:

python - 我如何在C中找到TRUE - FALSE的情况(需要写2^n种情况)

android - 使用ArcGIS android SDK的离线 map

python - Kivy 不检测 OpenGL 2.0

python - 基维,ModuleNotFoundError : No module named '_ctypes' when building an android app

python - 如何控制 Tkinter 中下拉菜单的位置?

python - 在多个分类器上进行网格搜索

python - 要列出的字节字符串

go - 将 map 分配给 Golang 中的 map

csv - d3.js - 在可缩放、可点击的 map 上绘制点

user-interface - Kivy - [严重] 绘制椭圆时警告迭代过多