Python Forum
[PyQt] Connecting progress bars to sensors - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: [PyQt] Connecting progress bars to sensors (/thread-37327.html)



Connecting progress bars to sensors - anastejzja - May-28-2022

Hi, I'm trying to make a whole GUI to control a robot, but I'm having real trouble with connecting the 5 sensors from the robot to the progress bars in the code. I can't find anything online. I know the code isn't perfect in any way, but until now, everything had worked. The application managed to connect to the robot, get data back from the robot, the battery was displayed. Leds don't work like they are supposed to and the engines of the wheels dont start correctly, but those things aren't that complicated ( i think ).
However the sensors mess up the WHOLE thing.
Is there any way to do it?


My code:

from PyQt5 import QtCore, QtGui, QtWidgets
import socket
import time
global s


class Ui_MainWindow(object):

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.columnView = QtWidgets.QColumnView(self.centralwidget)
        self.columnView.setGeometry(QtCore.QRect(20, 10, 751, 501))
        self.columnView.setObjectName("columnView")

        self.polacz = QtWidgets.QPushButton(self.centralwidget)
        self.polacz.setGeometry(QtCore.QRect(40, 60, 93, 28))
        self.polacz.setObjectName("polacz")
        self.polacz.clicked.connect(self.clickpolacz)

        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(40, 30, 81, 16))
        self.label.setObjectName("label")
        self.adres = QtWidgets.QTextEdit(self.centralwidget)
        self.adres.setGeometry(QtCore.QRect(120, 20, 111, 31))
        self.adres.setObjectName("adres")

        self.lewySilnik = QtWidgets.QSlider(self.centralwidget)
        self.lewySilnik.setGeometry(QtCore.QRect(170, 380, 491, 31))
        self.lewySilnik.setMinimumSize(QtCore.QSize(491, 0))
        self.lewySilnik.setOrientation(QtCore.Qt.Horizontal)
        self.lewySilnik.setObjectName("lewySilnik") #left engine
        self.lewySilnik.valueChanged.connect(self.slide_it)
        self.lewySilnik.setMinimum(-127)
        self.lewySilnik.setMaximum(128)
        self.val = 0

        self.prawySilnik = QtWidgets.QSlider(self.centralwidget)
        self.prawySilnik.setGeometry(QtCore.QRect(170, 440, 491, 31))
        self.prawySilnik.setOrientation(QtCore.Qt.Horizontal)
        self.prawySilnik.setObjectName("prawySilnik") # right engine
        self.prawySilnik.setMinimum(-127)
        self.prawySilnik.setMaximum(128)
        self.prawySilnik.valueChanged.connect(self.slide_it1)
        self.val1 = 0

        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(70, 380, 121, 31))
        self.label_2.setObjectName("label_2")

        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(70, 450, 81, 21))
        self.label_3.setObjectName("label_3")

        self.rozlacz = QtWidgets.QPushButton(self.centralwidget)
        self.rozlacz.setGeometry(QtCore.QRect(140, 60, 93, 28))
        self.rozlacz.setObjectName("rozlacz")
        self.rozlacz.clicked.connect(self.clickrozlacz)

        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(310, 20, 81, 31))
        self.label_4.setObjectName("label_4")

        self.bateria = QtWidgets.QTextBrowser(self.centralwidget)
        self.bateria.setGeometry(QtCore.QRect(290, 50, 121, 31))
        self.bateria.setObjectName("bateria")
        #self.bateria.setText(self.infobateria)


        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(520, 20, 141, 31))
        self.label_5.setObjectName("label_5")

        self.odebrana = QtWidgets.QTextBrowser(self.centralwidget)
        self.odebrana.setGeometry(QtCore.QRect(460, 50, 261, 31))
        self.odebrana.setObjectName("odebrana")  # message back



        self.sensor1 = QtWidgets.QProgressBar(self.centralwidget)
        self.sensor1.setGeometry(QtCore.QRect(30, 210, 118, 23))
        self.sensor1.setProperty("value", 0)
        self.sensor1.setMinimum(0)
        self.sensor1.setMaximum(2000)
        self.sensor1.setObjectName("sensor1")
        self.sensor1.

    def signal_accept(self, msg):
        self.pbar.setValue(int(msg))

        self.line_2 = QtWidgets.QFrame(self.centralwidget)
        self.line_2.setGeometry(QtCore.QRect(20, 100, 751, 20))
        self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_2.setObjectName("line_2")

        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(330, 120, 71, 21))
        self.label_6.setObjectName("label_6")

        self.sensor2 = QtWidgets.QProgressBar(self.centralwidget)
        self.sensor2.setGeometry(QtCore.QRect(160, 210, 118, 23))
        self.sensor2.setProperty("value", 24)
        self.sensor2.setMinimum(0)
        self.sensor2.setMaximum(2000)
        self.sensor2.setObjectName("sensor2")
        self.sensor2.value(0)

        self.sensor3 = QtWidgets.QProgressBar(self.centralwidget)
        self.sensor3.setGeometry(QtCore.QRect(300, 210, 118, 23))
        self.sensor3.setProperty("value", 24)
        self.sensor3.setMinimum(0)
        self.sensor3.setMaximum(2000)
        self.sensor3.setObjectName("sensor3")
        self.sensor3.value(0)

        self.sensor4 = QtWidgets.QProgressBar(self.centralwidget)
        self.sensor4.setGeometry(QtCore.QRect(450, 210, 118, 23))
        self.sensor4.setProperty("value", 24)
        self.sensor4.setMinimum(0)
        self.sensor4.setMaximum(2000)
        self.sensor4.setObjectName("sensor4")
        self.sensor4.value(0)

        self.sensor5 = QtWidgets.QProgressBar(self.centralwidget)
        self.sensor5.setGeometry(QtCore.QRect(610, 210, 118, 23))
        self.sensor5.setProperty("value", 24)
        self.sensor5.setMinimum(0)
        self.sensor5.setMaximum(2000)
        self.sensor5.setObjectName("sensor5")
        self.sensor5.value(0)

        self.label_7 = QtWidgets.QLabel(self.centralwidget)
        self.label_7.setGeometry(QtCore.QRect(60, 320, 161, 21))
        self.label_7.setObjectName("label_7")

        self.wyslana = QtWidgets.QTextBrowser(self.centralwidget)
        self.wyslana.setGeometry(QtCore.QRect(230, 320, 201, 31))
        self.wyslana.setObjectName("wyslana") # sent message

        self.led1 = QtWidgets.QCheckBox(self.centralwidget)
        self.led1.setGeometry(QtCore.QRect(480, 320, 121, 31))
        self.led1.setObjectName("led1")
        self.led1.stateChanged.connect(self.led1val)
        self.led1stan = 0

        self.led2 = QtWidgets.QCheckBox(self.centralwidget)
        self.led2.setGeometry(QtCore.QRect(570, 320, 121, 31))
        self.led2.setObjectName("led2")
        self.led2.stateChanged.connect(self.led2val)
        self.led2stan = 0

        self.reset = QtWidgets.QPushButton(self.centralwidget)
        self.reset.setGeometry(QtCore.QRect(650, 320, 93, 28))
        self.reset.setObjectName("reset")
        self.reset.clicked.connect(self.restart)

        self.label_8 = QtWidgets.QLabel(self.centralwidget)
        self.label_8.setGeometry(QtCore.QRect(50, 180, 71, 21))
        self.label_8.setObjectName("label_8")

        self.label_9 = QtWidgets.QLabel(self.centralwidget)
        self.label_9.setGeometry(QtCore.QRect(170, 180, 71, 21))
        self.label_9.setObjectName("label_9")

        self.label_10 = QtWidgets.QLabel(self.centralwidget)
        self.label_10.setGeometry(QtCore.QRect(300, 180, 71, 21))
        self.label_10.setObjectName("label_10")

        self.label_11 = QtWidgets.QLabel(self.centralwidget)
        self.label_11.setGeometry(QtCore.QRect(460, 180, 71, 21))
        self.label_11.setObjectName("label_11")

        self.label_12 = QtWidgets.QLabel(self.centralwidget)
        self.label_12.setGeometry(QtCore.QRect(620, 180, 71, 21))
        self.label_12.setObjectName("label_12")

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def slide_it(self, value):

        self.sum_slide_it(0, value)

    def slide_it1(self, value1):
        self.sum_slide_it(1, value1)

    def led1val(self, value2):
        if self.led1.isChecked():
            self.sum_slide_it(2, value2-1)
        else:
            self.sum_slide_it(2, value2)

    def led2val(self, value3):
        if self.led2.isChecked():
            self.sum_slide_it(3, value3 - 1)
        else:
            self.sum_slide_it(3, value3)

    def sum_slide_it(self, id, value):
        global s
        if id == 0:
            self.val = hex(value)
        if id == 1:
            self.val1 = hex(value)
        if id == 2:
            self.led1stan = (value)
        if id == 3:
            self.led2stan = (value)
        if id>-1 or id <4:

           self.send=('[' + str(self.led1stan) + str(self.led2stan) + str(self.val)[2:4] + str(self.val1)[2:4] + ']')
           self.wyslana.setText(self.send)
           s.send(str.encode(str(self.send)))
           BUFFER_SIZE = 1024
           self.data = s.recv(BUFFER_SIZE)
           self.odebrana.setText(str(self.data))
        # BATERIE
           self.bateryjka = int(self.data[2:6],16)
           self.bateria.setText(str(self.bateryjka))

           BUFFER_SIZE = 1024
           self.data = s.recv(BUFFER_SIZE)
    def s1(self,value):
           self.s1 = int(self.data[6:10])
           self.sensor1.setValue(self.s1)

    '''
           self.s2 = int(self.data[10:14])
           self.sensor2.setValue(self.s2)

           self.s3 = int(self.data[14:18])
           self.sensor3.setValue(self.s3)

           self.s4 = int(self.data[18:22])
           self.sensor4.setValue(self.s4)

           self.s5 = int(self.data[22:])
           self.sensor5.setValue(self.s5)
    '''
    def restart(self):
        self.send=('[000000]')
        s.send(str.encode(str(self.send)))
        self.wyslana.setText(self.send)
        self.prawySilnik.setValue(0)
        self.lewySilnik.setValue(0)

    #def infobateria(self):



    def clickpolacz(self):

        TCP_IP = self.adres.toPlainText()
        TCP_PORT = 8000
        s.connect((TCP_IP, TCP_PORT))

    def clickrozlacz(self):
        s.close()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.polacz.setText(_translate("MainWindow", "Połącz"))
        self.label.setText(_translate("MainWindow", "Adres robota"))
        self.label_2.setText(_translate("MainWindow", "Lewy Silnik"))
        self.label_3.setText(_translate("MainWindow", "Prawy Silnik"))
        self.rozlacz.setText(_translate("MainWindow", "Rozłącz"))
        self.label_4.setText(_translate("MainWindow", "Stan baterii"))
        self.label_5.setText(_translate("MainWindow", "Odebrana wiadomość "))
        self.label_6.setText(_translate("MainWindow", "Sensory"))
        self.label_7.setText(_translate("MainWindow", "Wysłana wiadomość"))
        self.led1.setText(_translate("MainWindow", "Led 1"))
        self.led2.setText(_translate("MainWindow", "Led 2"))
        self.reset.setText(_translate("MainWindow", "Reset"))
        self.label_8.setText(_translate("MainWindow", "Sensor 1"))
        self.label_9.setText(_translate("MainWindow", "Sensor 2"))
        self.label_10.setText(_translate("MainWindow", "Sensor 3"))
        self.label_11.setText(_translate("MainWindow", "Sensor 4"))
        self.label_12.setText(_translate("MainWindow", "Sensor 5"))


if __name__ == "__main__":
    import sys
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()


    sys.exit(app.exec_())
And the sensors part in data ( they are 1 to 5):


RE: Connecting progress bars to sensors - Axel_Erfurt - May-28-2022

Post your code in python tags.

You never get a window with this code.

It was made with QtDesigner? Convert it to py with

pyuic5 -x file.ui -o file.py

or import the ui file in PyQt5

https://nitratine.net/blog/post/how-to-import-a-pyqt5-ui-file-in-a-python-gui/


If you want to learn, don't use QtDesigner, it produces unnecessary code.