我基本上是想将kivy.garden.mapview作为小部件添加到kivy应用程序中。
这就是我试图做到的方式。
我还添加了Painter类,因为如果我将Painter用作小部件,则它可以完美工作,而Map类则不能。 如果将Map作为不带注释的返回mapview的应用进行测试,则也可以正常工作。
APP14
并且基维文件是
from kivy.app import App
# kivy.require("1.10.1")
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.garden.mapview import MapView,MapMarker
from kivy.uix.widget import Widget
from kivy.graphics import Line
xList = [3.2,4]
yList = [2.3,3]
class Map(Widget):
def on_touch_down(self, touch):
global xList
global yList
mapview = MapView(zoom=1, lat=67, lon=42)
m1 = MapMarker(lat=67, lon=42)
mapview.add_marker(m1)
print(xList)
print(yList)
for i in range(len(xList)):
m=MapMarker(lat=xList[i],lon=yList[i])
mapview.add_marker(m)
# return mapview
class Painter(Widget):
def on_touch_down(self, touch):
with self.canvas:
touch.ud["line"] = Line(points=(touch.x, touch.y))
def on_touch_move(self, touch):
touch.ud["line"].points += [touch.x, touch.y]
class MainScreen(Screen):
pass
class AnotherScreen(Screen):
pass
class ScreenManagement(ScreenManager):
pass
presentation = Builder.load_file("SimpleKivy.kv")
class MainApp(App):
def build(self):
return presentation
if __name__ == "__main__":
MainApp().run()
那我应该怎么做?
我可以在不使地图成为小部件的情况下做到这一点吗?
我需要一张图表,所以我至少需要2个屏幕。
答案 0 :(得分:0)
您实际上没有将MapView
添加到您的App
中。您可以在Map
小部件中引用它,但切勿将其添加到App
中。一种方法是更改Map
以扩展MapView
。:
class Map(MapView):
def on_touch_down(self, touch):
global xList
global yList
m1 = MapMarker(lat=67, lon=42)
self.add_marker(m1)
print(xList)
print(yList)
for i in range(len(xList)):
m=MapMarker(lat=xList[i],lon=yList[i])
self.add_marker(m)
然后在您的kv
文件中,添加Map
的初始设置:
Map:
zoom: 1
lat: 67
lon: 42
答案 1 :(得分:0)
使用POPUP
class mappopup(RelativeLayout):
def get(self):
x=self.ids.latitude.text
print(x)
print(self.ids.longitude.text)
def openmap(self):
popup = Popup(content=mappopup())
popup.open()
<mappopup>:
MapView:
id: mapview
lat: 20.9517
lon: 85.0985
zoom: 8
MapMarker:
lat: mapvie w.lat
lon: mapview.lon
Toolbar:
Label:
id: latitude
text: "Longitude: {}".format(mapview.lon)
Label:
id: longitude
text: "Latitude: {}".format(mapview.lat)
Button:
text:"OK"
on_release:root.get()