无法更新 Kivy-Mapview 上的标记 Python
Cannot update the marker on Kivy-Mapview Python
大家好。希望你们一切都好。
我刚开始在 Python 上使用 Kivy Mapview 并做了一些示例。现在,我正在尝试创建一个动态标记,它能够每 0.5 秒自动 move/reposition 一次。我正在进行一个项目,在项目结束时我需要提供实时 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
你的代码有几个问题,但主要问题是你的 MapViewApp
永远不会 运行,因为你的 build()
方法中有一个无限循环。由于 build()
方法永远不会 returns,因此 runTouchApp()
方法永远不会执行。
在相关说明中,您也不希望将无限循环放在 kivy
App
的主线程上。 App
GUI 的更新发生在主线程上,如果某些方法占用了主线程,则 GUI 将被冻结。这样的循环应该 运行 在一个单独的线程上,它对 GUI 所做的任何修改都是通过类似 Clock.schedule_once()
的方式完成的,以便将这些 GUI 修改返回到主线程。
大家好。希望你们一切都好。
我刚开始在 Python 上使用 Kivy Mapview 并做了一些示例。现在,我正在尝试创建一个动态标记,它能够每 0.5 秒自动 move/reposition 一次。我正在进行一个项目,在项目结束时我需要提供实时 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
你的代码有几个问题,但主要问题是你的 MapViewApp
永远不会 运行,因为你的 build()
方法中有一个无限循环。由于 build()
方法永远不会 returns,因此 runTouchApp()
方法永远不会执行。
在相关说明中,您也不希望将无限循环放在 kivy
App
的主线程上。 App
GUI 的更新发生在主线程上,如果某些方法占用了主线程,则 GUI 将被冻结。这样的循环应该 运行 在一个单独的线程上,它对 GUI 所做的任何修改都是通过类似 Clock.schedule_once()
的方式完成的,以便将这些 GUI 修改返回到主线程。