Kivy图形与以太网数据接收

2024-10-02 10:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我的kivy代码必须平稳地将一个小部件从a点线性移动到B点,并通过以太网电缆接收UDP数据包。现在小部件从A平稳地移动到C(AB线之间的C),然后停止接收数据(可能是0.5到1秒),然后小部件再次移动。 因此,运动不平稳。你知道如何解决这个问题吗? 我使用python中的socket模块进行数据接收

我甚至尝试过线程编程。同样的问题也没有帮助

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应用程序的端口接收数据而不干扰其图形


Tags: selfdata部件defstatusupdatesocketclass
1条回答
网友
1楼 · 发布于 2024-10-02 10:20:36

问题是您使用Clock.schedule_interval()进行以太网接收。Clock.schedule系列计划在主线程上运行的方法,因此您的以太网工作将在与小部件运动相同的(GUI)线程上完成。这会影响GUI性能。使用类似threading.Thread(target=self.ethernet_recv).start()的方法将以太网代码放入另一个线程中。目标方法需要执行循环,以0.5秒的间隔调用self.receive_ev_status()

看看this documentation

相关问题 更多 >

    热门问题