Kivy графика с приемом данных Ethernet - PullRequest
0 голосов
/ 01 июня 2019

Мой код kivy должен плавно перемещать виджет из точки A в точку B, а также получать UDP-пакет по Ethernet-кабелю. На данный момент виджет плавно перемещается от A к C (C между строкой AB), а затем прекращает получать данные (может быть от 0,5 до 1 секунды), а затем виджет перемещается снова. Движение не плавное из-за этого. Есть идеи, как решить эту проблему? Я использую модуль сокета от Python для приема данных.

Я даже пытался программировать потоки. Это не помогло, такая же проблема.

class DemoCreator(AnchorLayout):

    ev_status = NumericProperty(None)  # get ev status(UDP packet)

    def receive_ev_status(self):
        r = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        r.bind(('', 5555))
        prev_data = 0
        data, _ = r.recvfrom(1024)

        if not data:
            data = prev_data
        return int.from_bytes(data, 'little')

    def update_ev_status(self, dt):
        self.ev_status = self.receive_ev_status()


class DemoApp(App):

    def build(self):

        hmi = DemoCreator()
        hmi.map_box.host_car.start((450, 0)

        Clock.schedule_interval(hmi.update_ev_status, 0.5)
        Clock.schedule_interval(hmi.map_box.update_car, 1 / 60)

        return hmi

if __name__ == '__main__':
    DemoApp().run()

как получать данные, используя порты для приложения kivy, не нарушая его графику?

1 Ответ

0 голосов
/ 02 июня 2019

Проблема в том, что вы используете Clock.schedule_interval() для приема по Ethernet.Семейство Clock.schedule планирует методы для запуска в главном потоке, поэтому ваша работа с Ethernet выполняется в том же (GUI) потоке, что и движение вашего виджета.Это влияет на производительность графического интерфейса.Поместите ваш Ethernet-код в другой поток, используя что-то вроде threading.Thread(target=self.ethernet_recv).start().Целевой метод должен выполнить цикл для вызова вашего self.receive_ev_status() с интервалом в 0,5 секунды.

Просмотрите эту документацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...