【问题标题】:OBDII data pass to wxpython staticText continues update issues(raspberry PI2)OBDII 数据传递给 wxpython staticText 继续更新问题(树莓派 PI2)
【发布时间】:2015-11-01 17:49:23
【问题描述】:

我是编程的初学者。我已经通过使用树莓派连接到汽车 OBD 端口并将数据读取到 wxpython GUI 来启动一个小项目。我使用的 OBD 库来自 http://brendan-w.com/work/python-obd 通过使用上面的指令,我可以成功地在 python shell 中逐行打印活的 rpm 数据。 代码在这里:

import obd
import time 

connection = obd.Async("/dev/rfcomm0") # same constructor as 'obd.OBD()'
cmd = obd.commands.RPM 

connection.watch(cmd) # keep track of the RPM

connection.start() # start the async update loop

while(True):

           response_rpm = connection.query(cmd).value

           print(response_rpm) # non-blocking, returns immediately

           time.sleep(0.01)

#obd.debug.console = True

在此之后,我使用 wxformbuilder 创建了 GUI,并更改为 wxpython 代码。 我在树莓派中测试了 GUI wxpython 代码,这没问题。 但是在将我的 OBD 库代码添加到其中之后,整个框架都无法正常工作 我想做的是使用 staticText.SetLabel() 在 while 循环中显示实时数据。 添加OBD库后的代码在这里:http://pastebin.com/4HYXn4cv 在树莓派中运行它之后 我只有一个灰色的框架,没有任何工作

【问题讨论】:

    标签: wxpython raspberry-pi2 obd-ii


    【解决方案1】:

    问题是您在紧密的while(True) 循环中使用sleep 语句阻塞了GUI。您实际上是以固定的时间间隔轮询传感器。

    wxPython 中进行轮询的明智方法是使用计时器 (wx.Timer)。您可以将其称为 while 循环的内容(不要每秒调用超过 20 次,更多只是无用,会阻塞事件循环)。 sleep 必须删除,因为它占用了所有计划外的时间并阻塞了 GUI。

    python-odb 本身已经是不同步的(see,第二个示例),但上述解决方案需要最少的程序重组。

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      相关资源
      最近更新 更多