Python 无法从arduino获取gps坐标以绑定kivy mapview

Python 无法从arduino获取gps坐标以绑定kivy mapview,python,kivy,Python,Kivy,图(1)是我的gps屏蔽的lat和lon数据。然后我将它们分成两个数据:python文件中的lat_text和lon_text。我试图把变量放在各自的mapview lat和lon中。然而,当我运行代码时,我得到的只是一个空白映射(图2)。然后,我尝试通过添加print(self.lon_text)和print(self.lat_text)将arduino串行监视器中的值打印到python中,我意识到这些值首先打印出零,然后是我的实际gps lat和lon(图3) .py文件 import

图(1)是我的gps屏蔽的lat和lon数据。然后我将它们分成两个数据:python文件中的
lat_text
lon_text
。我试图把变量放在各自的mapview lat和lon中。然而,当我运行代码时,我得到的只是一个空白映射(图2)。然后,我尝试通过添加
print(self.lon_text)
print(self.lat_text)
将arduino串行监视器中的值打印到python中,我意识到这些值首先打印出零,然后是我的实际gps lat和lon(图3)

.py文件

import threading    
import serial
from kivy.clock import mainthread
from kivy.garden.mapview import MapView, MapMarker
from kivy.app import App
from kivy.lang import Builder
from kivy.properties import StringProperty, NumericProperty
from kivy.uix.screenmanager import ScreenManager, Screen

KV = """

WindowManager:
    NaviWindow:

<NaviWindow>:


"""



class WindowManager(ScreenManager):
    pass

class NaviWindow(Screen):
    lat_text = NumericProperty()
    lon_text = NumericProperty()

    def __init__(self, **kwargs):
        super(NaviWindow, self).__init__(**kwargs)
        threading.Thread(target=self.tm).start()
        self.map = MapView(zoom=18, lat=self.lat_text, lon=self.lon_text, double_tap_zoom = True)
        self.marker_1 = MapMarker(lat=self.lat_text, lon=self.lon_text)
        self.map.add_marker(self.marker_1)
        self.add_widget(self.map)

    def tm(self):
        while (1):
            with serial.Serial('COM4', 9600) as ser:
                data = str(ser.readline().strip().decode('ascii'))
                ser.close()
                self.update_values(data.split("|"))
                print (self.lon_text)
                print (self.lat_text)

    @mainthread
    def update_values(self, data):
        self.lat_text = float(data[0])  # data[0] It's still a string
        self.lon_text = float(data[1])  # You need to specify that that part is a number

class MyMainApp(App):
    def build(self):
        return Builder.load_string(KV)

if __name__ == "__main__":
    MyMainApp().run()
导入线程
导入序列号
从kivy.clock导入主线程
从kivy.garden.mapview导入地图视图、地图标记
从kivy.app导入应用程序
从kivy.lang导入生成器
从kivy.properties导入StringProperty、NumericProperty
从kivy.uix.screenmanager导入screenmanager,屏幕
KV=”“”
WindowManager:
导航窗口:
:
"""
类WindowManager(屏幕管理器):
通过
类导航窗口(屏幕):
lat_text=NumericProperty()
lon_text=NumericProperty()
定义初始(自我,**kwargs):
超级(NaviWindow,self)。\uuuuu初始化(**kwargs)
threading.Thread(target=self.tm).start()
self.map=MapView(缩放=18,横向=self.lat_文本,纵向=self.lon_文本,双击缩放=True)
self.marker_1=MapMarker(lat=self.lat_文本,lon=self.lon_文本)
self.map.add_标记(self.marker_1)
self.add_小部件(self.map)
def tm(自我):
而(一):
使用serial.serial('COM4',9600)作为ser:
data=str(ser.readline().strip().decode('ascii'))
塞尔克洛斯()
self.update_值(data.split(“|”))
打印(self.lon_文本)
打印(自横向文本)
@主线
def更新_值(自身、数据):
self.lat_text=float(数据[0])#数据[0]它仍然是一个字符串
self.lon_text=float(数据[1])#您需要指定该部分是一个数字
类MyMainApp(应用程序):
def生成(自):
返回生成器。加载字符串(KV)
如果名称=“\uuuuu main\uuuuuuuu”:
MyMainApp().run()

您从该错误消息中了解到了什么?您是否尝试检查字符串的内容是否符合预期?能否显示data.split(“|”)正在执行的操作?我已经编辑了我的问题,显示了data split在@PabloGod中执行的操作