PyQt是Qt的python版本,继承了Qt强大的图形编程能力和python的容易上手特点,使我们开发GUI应用更加的便捷,加上python可以导入各种强大的模块库,可以说用python+N多模块库,我们便可以开发出许多有趣实用的应用。今天我们就来说一说PyQt、PyQwt以及Pyserial组成的“实时”数据采集器。我们使用pip来安装python的第三方模块,关于pip和python的安装可以参考[1][2]。在命令行分别输入:pip install pyserial、pip install pyqt4、pip install pyqwt
如果提示有库安装不了,可以试一试从Unofficial Windows Binaries for Python Extension Packages下载whl格式的安装文件到指定目录,例如存放在D:\mtpt_dir\PyQt4-4.11.4-cp36-cp36m-win_amd64.whl,然后在cmd窗口中切换到该目录下:cd /D d:\mtpt_dir[回车],输入pip install PyQt4-4.11.4-cp36-cp36m-win_amd64.whl[回车]进行安装。这里需要注意的是cp36对应python版本3.6,amd64对应64位计算机,用户需要根据实际计算机安装的python版本及计算机位数选择对应的版本进行安装。
[以下译改自https://eli.thegreenplace.net/2009/08/07/a-live-data-monitor-with-python-pyqt-and-pyserial]
PySerial使Python成为与计算机进行串行通信的好工具,因为它可以轻松地与其他强大的Python库结合,以创建全面的应用程序。在我创建的实例中,我使用PyQt以及其辅助绘图工具库PyQwt创建漂亮的“动态”绘图应用程序,结合PySerial进行串口通信。这是一个演示:
下载plotting_data_monitor [3]- 它是一个用Python编写的小型演示应用程序,需要在您的计算机上安装以下模块:
-
- PyQt
- PyQwt
- PySerial
它有什么作用?好吧,它基本上展示了如何以简单的方式将Python的所有这些能力组合成单个应用程序。您可以选择串行端口,然后运行监视器(全部通过菜单方式)。如果另一个程序正在向指定的端口发送数据,您将看到“实时更新”图:
如果没有发送数据到您计算机的串口工具,不用担心。如果您已经安装Virtual Serial Port Driver或类似的虚拟端口仿真器,配置它将两个串口端口连接在一起。
然后,运行sender_sim.py,它是一个非常简单的数据发送脚本(它提供的数据是一个愉快的伪随机正弦曲线)。如果您的端口号不同,您可能需要更改硬编码的端口名称。
当这个发送者和监视器都在同一台机器上运行时,您将可以看到现场绘图。请注意,我从PyQwt添加了几个额外的功能:
-
- 一个显示平均温度的“热”条
- 一个旋钮可以设置监视器更新屏幕的频率
这些小部件和其他几个小部件使PyQwt成为一个很好的库,用于在Python中模拟Labview类型的“lab control”应用程序。我极其推荐它。
它是如何工作的
监视器是一个玩具演示,但它是基于我用于实际应用程序的几个强大的工具。例如,串行通信本身在单独的线程(在com_monitor模块中)执行。该线程在循环中阻塞串行端口上的读取,并通过queue将数据传送到GUI (连同每个收到的数据块的精确时间戳)。这是一个强大而安全的实现,可用于多种基于GUI的监控应用程序。
在监视器运行时,运行周期性定时器(QTimer)来更新GUI本身。定时器事件处理程序检查新数据是否已从监视器到达并相应地更新显示窗口小部件。
其余代码是您PyQt惯常做法 - 创建菜单,状态栏,GUI小部件,将所有内容妥善地放置并连接事件。
我希望人们会发现这段代码很有用。如果您无法运行或了解其运作方式,请告诉我们。我建议使用最新的Python 3.6版本[3]的所有必需的模块。我只在Windows上检查,但没有任何理由不运行在其他操作系统上。
参考及注释
[3].作者使用的python2.x编写,我简单修改了一下以便在python3.x下运行,需要参考原版代码的参考原链接。plotting_data_monitor工程目录如下图所示,运行红框1,表示图形应用界面,运行红框2表示向指定串口发送模拟数据以显示在图形应用界面上。