Как добавить kivy.garden.mapview на экран в приложении kivy с помощью диспетчера экрана - PullRequest
0 голосов
/ 17 декабря 2018

Я в основном пытаюсь добавить kivy.garden.mapview в качестве виджета в приложение kivy.

Вот как я пытался это сделать.

Я также добавил класс Painter, потому что еслиЯ использую Painter как виджет, он отлично работает, а класс Map - нет.Кроме того, Map, если она протестирована как приложение с возвращаемым комментарием и обратно, отлично работает.

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

, а файл kivy -

#: import FadeTransition kivy.uix.screenmanager.FadeTransition

ScreenManagement:
    transition: FadeTransition()
    MainScreen:
    AnotherScreen:

<MainScreen>:
    name: "main"
    Button:
        on_release: app.root.current = "Map"
        text: "Map"
        font_size: 8
        size_hint:0.05,0.05
        pos_hint: {"right":1,"top":1}
        color: 0,1,0,1

<AnotherScreen>:
    name: "Map"

    FloatLayout:
        Map
        Button:
            color: 0,1,0,1
            font_size: 8
            size_hint: 0.05,0.05
            text: "Graph"
            on_release: app.root.current = "main"
            pos_hint: {"right":1, "top":1}

Так как мне это сделать?

Могу ли я сделать это, не делая карту виджетом?

Мне нужен график, поэтому мне нужно иметь как минимум 2 экрана.

1 Ответ

0 голосов
/ 17 декабря 2018

Вы на самом деле не добавили 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
...