基于PyQt5将ROS节点上接收到的实时数据动态绘制在GUI界面上

今年4月初开始接触PyQt5,5月开始重新从头学ROS(去年自学过一个月,早就已经啥都不记得了...),吭哧吭哧倒腾了许久,总算是完成了以下三项任务:

1. 基于PyQt5编写GUI界面,界面上包含按钮、编辑框、曲线图等

2. 基于rospy进行简单的自定义消息的发布和订阅

3. 将ROS订阅节点上接收到的实时数据以动态曲线的形式绘制在用PyQt5编写的GUI界面上

过程是艰辛的,没有太多基础,从零开始探索真的很痛苦,在这期间,心态不知道爆炸了多少次。但是当一个一个问题得到了解决,内心也是有成就感和自信心的。

闲言少叙,按上述列出的三项任务的顺序,我们开始说正事儿:

一、基于PyQt5编写GUI界面,界面上包含按钮、编辑框、曲线图等

一般用PyQt5写GUI界面有两种方法:1. 直接写python代码,实现各控件的布局安排和触发机制;2. 借助Qt Designer,以一种可视化的方式完成拖控件调整布局和各种槽函数的设置,并自动生成.py文件。这篇文章的重点其实不在界面的设计上,因此下面就举个简单的例子,直接随便写点python代码就好了。当然咯,在编写布局和功能都比较复杂的GUI界面的时候,按我的习惯,其实是用Qt Designer设计界面,生成.py文件后,再通过添加代码完善功能。

以下就是一段包含一个按钮、一个文本编辑框、一个绘图控件的python代码实例:

# 导入需要的各个模块
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import pyqtgraph as pg  # pyqtgraph是一个很好用的绘图模块

class Signal(QWidget):
    def __init__(self):       
        super(Signal, self).__init__()
        self.initUI()
        
    def initUI(self):
        self.setGeometry(0, 0, 1200, 800)  # 设置GUI界面的大小
        self.setWindowTitle('signal_analysis')  # 界面窗口名称
        layout_chart = QtWidgets.QGridLayout()  # 表格布局
        self.setLayout(layout_chart)
        pg.setConfigOption('background', 'w')  # 把绘图控件的背景设置为白色,默认是黑色的
        self.pw = pg.PlotWidget()
        self.pw.showGrid(x=True, y=True)  # 绘图控件显示网格
        self.curve = self.pw.plot(pen='k')  # 画笔颜色设置
        layout_chart.addWidget(self.pw, 0, 0, 9, 10)  # 绘图控件在整个GUI界面上所占的区域设置,这里表示绘图控件在表格布局的第一行第一列,并且占据9行10列的区域
        
        bt1 = QPushButton('Button', self)  # 按钮控件
        layout_chart.addWidget(bt1, 10, 0, 1, 1)  # 按钮控件在表格布局中的第11行第1列,因为前面设置了绘图控件占9行,所以前面9行都是绘图控件,第10行空出来,不然图像和别的控件挨太近不好看
        text1_edit = QLineEdit("", self)  #  # 文本编辑框
        layout_chart.addWidget(text1_edit, 10, 1, 1, 2)  # 文本编辑框放在按钮旁边,占2列宽
        
def main():
    app = QtWidgets.QApplication(sys.argv)
    gui = Signal()  
    gui.show() 
    sys.exit(app.exec_())
    
if __name__ =='__main__':
    main()

以上代码大部分语句都打了注释,还是很好理解的。代码运行的结果就是得到了如下界面:

总的来说,PyQt5的功能还是很强大的,需要多加练习以达到熟能生巧的状态,我还在生巧的过程中。。。

(备注:PyQt5的学习,主要参考了知乎专栏:https://zhuanlan.zhihu.com/p/48373518?utm_source=wechat_session&utm_medium=social&utm_oi=61921436893184 和《PyQt5快速开发与实战》这本书)

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值