【问题标题】:Cannot update the marker on Kivy-Mapview Python无法更新 Kivy-Mapview Python 上的标记
【发布时间】:2021-05-16 00:33:56
【问题描述】:

大家好。希望你们一切都好。

我刚刚开始在 Python 上使用 Kivy Mapview 并做了一些示例。现在,我正在尝试创建一个能够在每 0.5 秒内移动/重新定位自身的动态标记。我正在进行一个项目,最后我需要提供实时 GPS 跟踪。这就是我尝试创建动态标记的原因。这是我尝试过的:

.py 文件:

from kivy.garden.mapview import MapView, MapMarker
from kivy.app import App
import time

class MapViewApp(App):
    def build(self):
        while True:
            increment = 0.0001
            mapview = MapView(zoom=19, lat=40.219867, lon=28.964641)
        
            marker_1 = MapMarker(lon=28.964641 + increment, lat=40.219867 + increment, source="circle_PNG36.png")
            mapview.add_marker(marker_1)
            increment = increment + 0.01
            mapview.remove_marker(marker1)
            time.sleep(0.5)
        
MapViewApp().run()

.kv 文件:

#:import MapView kivy.garden.mapview.MapView

MapView:
    MapMarkerPopup:
    lat: self.lat
    lon: self.lon

【问题讨论】:

    标签: python kivy gps


    【解决方案1】:

    你的代码有几个问题,但主要问题是你的MapViewApp 永远不会运行,因为你的build() 方法中有一个无限循环。由于build() 方法永远不会返回,runTouchApp() 方法永远不会被执行。

    在相关说明中,您也不希望将无限循环放在kivy App 的主线程上。 App GUI 的更新发生在主线程上,如果某些方法占用了主线程,则 GUI 将被冻结。这样的循环应该在单独的线程上运行,它对 GUI 所做的任何修改都可以通过 Clock.schedule_once() 之类的东西来完成,以便将这些 GUI 修改返回到主线程。

    【讨论】:

    • 你完全正确。我环顾四周,发现了一个具有类似目的的代码。根据您提到的内容对其进行了修改,这一切都有效。感谢您的提醒,不胜感激!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多