pyqt5でGUIアプリ開発
背景
ROS搭載ロボット用に開発した基板のデバッグ用アプリをVisual Studio 2019を使用していたが、 ROS開発環境があるならpyqt5で開発した方が便利・楽であると考えたので簡易なアプリを開発してみた。 備忘録として記録を残す。
開発したもの
開発したアプリは非常に単純なもので、入力欄とボタンがあり、ボタンを押下すると対応した入力欄の数値を既定のtopicにpublishするものである。 成果物は以下。
スクリプト
スクリプトは以下。
#!/usr/bin/python import rospy from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel, QLineEdit from std_msgs.msg import String from std_msgs.msg import UInt16 from std_msgs.msg import Int16MultiArray pub_string = rospy.Publisher('topic_string', String, queue_size = 1) pub_int = rospy.Publisher('topic_int', UInt16, queue_size = 1) pub_array = rospy.Publisher('topic_array', Int16MultiArray, queue_size = 1) def on_string_btn_clicked(): pub_string.publish(string_input.text()) def on_int_btn_clicked(): pub_int.publish(int(int_input.text())) def on_array_btn_clicked(): array = [int(array_input1.text()), int(array_input2.text())] data_array = Int16MultiArray(data = array) pub_array.publish(data_array) if __name__ == '__main__': app = QApplication([]) window = QWidget() window.setWindowTitle('QGridLayout') label_string = QLabel('Enter String') string_input = QLineEdit('') btn_string = QPushButton('Publish String') btn_string.clicked.connect(on_string_btn_clicked) label_int = QLabel('Enter Int') int_input = QLineEdit('') btn_int = QPushButton('Publish Int') btn_int.clicked.connect(on_int_btn_clicked) label_array1 = QLabel('Array1') array_input1 = QLineEdit('') label_array2 = QLabel('Array2') array_input2 = QLineEdit('') btn_array = QPushButton('Send Array') btn_array.clicked.connect(on_array_btn_clicked) layout = QGridLayout() layout.addWidget(label_string, 0, 0) layout.addWidget(string_input, 0, 1) layout.addWidget(btn_string, 0, 2) layout.addWidget(label_int, 1, 0) layout.addWidget(int_input, 1, 1) layout.addWidget(btn_int, 1, 2) layout.addWidget(label_array1, 2, 0) layout.addWidget(array_input1, 2, 1) layout.addWidget(label_array2, 3, 0) layout.addWidget(array_input2, 3, 1) layout.addWidget(btn_array, 2, 2, 2, 2) window.setLayout(layout) window.show() rospy.init_node('pub_test', anonymous=True) app.exec_()
成果物
成果物を再掲。