gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:10:01 26 4
gpt4 key购买 nike

我去了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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com