Qt Designer Хранение и анализ пользовательского ввода из строки редактирования с использованием Python в операционную систему робота (ROS)

#qt #pyqt #pyqt4 #ros

#qt #pyqt #pyqt4 #ros

Вопрос:

В настоящее время я пытаюсь создать графический интерфейс, который позволяет пользователям вводить любые слова, которые они хотят перевести в голос R2-D2.

Я использовал Qt 5 Designer для создания пользовательского ввода с помощью редактирования строки и кнопки, которая будет публиковать пользовательский ввод в указанную тему в ROS. Я также преобразовал его в файл python, используя pyuic5 -o как r2d2_sound_control.py и у меня есть основной файл под названием main_r2d2_sound_control.py что я буду запускать для инициализации графического интерфейса.

Как вы сохраняете и анализируете строку из строки редактирования с помощью python? Я не знаю, как объявить строку из пользовательского ввода и проанализировать ее при нажатии кнопки. Я использую pyqt 4

Заранее благодарю вас.

Ссылка на голосовой пакет R2-D2 в GitHub https://github.com/koide3/ros2d2

Содержимое r2d2_sound_control.py:

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

# Form implementation generated from reading ui file 'r2d2_sound_control.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(505, 114)
        self.pushButton_speak = QtWidgets.QPushButton(Dialog)
        self.pushButton_speak.setGeometry(QtCore.QRect(300, 40, 89, 25))
        self.pushButton_speak.setObjectName("pushButton_speak")
        self.lineEdit_speak = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_speak.setGeometry(QtCore.QRect(60, 40, 201, 25))
        self.lineEdit_speak.setObjectName("lineEdit_speak")

        self.retranslateUi(Dialog)
        self.pushButton_speak.clicked.connect(Dialog.clicked_speak)
        self.lineEdit_speak.returnPressed.connect(Dialog.clicked_speak)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton_speak.setText(_translate("Dialog", "Say Out"))
  

Содержимое main_r2d2_sound_control.py

 #! /usr/bin/python3
# -*- coding: utf-8 -*-

# GUI
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
#Import the automatically generated file
from r2d2_sound_control import Ui_Dialog

# ROS
import rospy
from std_msgs.msg import String


class Test(QDialog):
    def __init__(self,parent=None):
        # GUI
        super(Test, self).__init__(parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

        # ROS pub settings
        self.r2d2_sound_controller_String = String()
        self.pub_r2d2_sound_controller_speak = rospy.Publisher('/ros2d2_node/speak',String,queue_size=10)

    def speak_content(self):
        self.input = string(lineEdit_speak)
        self.lineEdit_speak.setText(self.text())
        

    def clicked_speak(self):
        """
        The slot name specified in Qt Designer.
        Write the process you want to execute with the "Say Out" button.
        """
        self.r2d2_sound_controller_String.data = text()
        self.pub_r2d2_sound_controller_speak.publish(self.r2d2_sound_controller_String)
        self.r2d2_sound_controller_String.data = ''

if __name__ == '__main__':
    rospy.init_node('r2d2_sound_talker')
    app = QApplication(sys.argv)
    window = Test()
    window.show()
    sys.exit(app.exec_())
  

Комментарии:

1. Что вы подразумеваете под «именем слота, указанным в Designer»?

2. Он используется для определения различных действий, которые соответствуют кнопке при нажатии. Основной файл содержит внутренний код для контроллера GUI. Используется в r2d2_sound_control.py : self.pushButton_speak.clicked.connect(Dialog.clicked_speak) Используется в main_r2d2_sound_control.py: def clicked_speak(self):

Ответ №1:

Мне удалось это исправить благодаря моему другу. Я внес следующие изменения в main_r2d2_sound_control.py

 #! /usr/bin/python3
# -*- coding: utf-8 -*-

# GUI
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
#Import the automatically generated file
from r2d2_head_gripper_sound import Ui_Dialog

# ROS
import rospy
from std_msgs.msg import String

class Test(QDialog):
    def __init__(self,parent=None):
        # GUI
        super(Test, self).__init__(parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

        # ROS pub settings
        self.r2d2_sound_controller_String = String()
        self.pub_r2d2_sound_controller_speak = rospy.Publisher('/ros2d2_node/speak',String,queue_size=10)

        self.r2d2_sound_controller_String.data = ''

    def clicked_speak(self):
        """
        The slot name specified in Qt Designer.
        Write the process you want to execute with the "Say Out" button.
        """
        text = self.ui.lineEdit_speak.text()
        self.r2d2_sound_controller_String.data = text
        self.pub_r2d2_sound_controller_speak.publish(self.r2d2_sound_controller_String)

if __name__ == '__main__':
    rospy.init_node('r2d2_head_and_gripper_talker')
    app = QApplication(sys.argv)
    window = Test()
    window.show()
    sys.exit(app.exec_())