qt pushbutton添加图片_vscode开发ROS1(22)-给ros添加界面(python)

6fbab9c8e863e7f27b479ed8b2703f4d.png

写在最前

ROS系统一般来说是不需要自己弄界面的, 况且ROS有非常强大的rviz工具. 不过有些时候还是需要界面更加方便. ROS添加图形界面可以使用c++也可以使用python. c++稍微复杂一点, 需要对ros库进行配置, 同时涉及到线程编程, 本此采用python编程, 比较容易一点.

pyqt5

首先呢, 我们需要安装pyqt5图形库, 安装方法很简单, ctrl+ shift+ t弹出终端. 输入以下命令

sudo pip install python-qt5

学习pyqt5

开始GUI编程之前, 请大家自学pyqt5的编程, 本篇就不给大家接受pyqt5的相关知识了, 给大家推荐一个网站: pyqt5中文教程, 请大家对照学习即可.

创建ros节点

1, 在scripts文件夹中, 新建pyGUI.py文件.
2, 粘贴以下代码

# -*- coding: utf-8 -*-

from PyQt5 import QtCore, QtGui, QtWidgets #qt相关
import sys    #系统
import rospy  #ros
from std_msgs.msg import String #导入std_msg/string这个数据类型

class Ui_MainWindow(object):        #UI类
    def setupUi(self, MainWindow):  #初始化UI
        MainWindow.setObjectName("MainWindow") #设置Mainwindow名称
        MainWindow.resize(307, 57)  #重置Mainwindow大小
        #centralwidget
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        #垂直布局
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName("verticalLayout")
        #水平布局
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        #添加按钮
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.click) #按钮事件
        self.horizontalLayout.addWidget(self.pushButton) 
        #添加文本框
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout.addWidget(self.lineEdit)
        self.verticalLayout.addLayout(self.horizontalLayout)
        MainWindow.setCentralWidget(self.centralwidget)
        
        #初始化ROS节点
        rospy.init_node("ros_gui")
        #创建发布者
        self.pub = rospy.Publisher('chatter', String, queue_size=10) #话题的名称chatter

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    #点击事件
    def click(self):
        self.pub.publish(self.lineEdit.text())
    #国际化
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "发布"))

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)  # 创建一个QApplication,也就是你要开发的软件app
    MainWindow = QtWidgets.QMainWindow()    # 创建一个QMainWindow,用来装载你需要的各种组件、控件
    ui = Ui_MainWindow()                    # ui是Ui_MainWindow()类的实例化对象
    ui.setupUi(MainWindow)                  # 执行类中的setupUi方法,方法的参数是第二步中创建的QMainWindow
    MainWindow.show()                       # 执行QMainWindow的show()方法,显示这个QMainWindow
    sys.exit(app.exec_())                   # 使用exit()或者点击关闭按钮退出QApplication

3, 具体介绍请看注释, 主要是创建了一个按钮和一个文本框, 使用按钮点击实现publisher.

运行ROS节点

1, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入roscore,启用整个ROS总节点。
2, 使用快捷键Ctrl + Shift + T 弹出系统终端,输入rosrun ros_test listener,启用listener节点。
3, 使用vscode的终端中cd命令,定位到pyGUI.py文件

cd src/ros_test/scripts/

4, 打开pyGUI

python2 pyGUI.py

7592e88a9be2472591a76e9e9282668d.png


5, 通过点击发布按钮, 即可发现发布成功, 被listener接收到.

dc0b6b75fc4c247f65d5be8f91e2d5d8.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值