我的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应用程序的端口接收数据而不干扰其图形
问题是您使用
Clock.schedule_interval()
进行以太网接收。Clock.schedule
系列计划在主线程上运行的方法,因此您的以太网工作将在与小部件运动相同的(GUI)线程上完成。这会影响GUI性能。使用类似threading.Thread(target=self.ethernet_recv).start()
的方法将以太网代码放入另一个线程中。目标方法需要执行循环,以0.5秒的间隔调用self.receive_ev_status()
看看this documentation
相关问题 更多 >
编程相关推荐