如何使用屏幕管理器将kivy.garden.mapview添加到kivy应用程序中的屏幕

时间:2018-12-17 07:30:48

标签: python kivy kivy-language

我基本上是想将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个屏幕。

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()