Skip to content

serialPy и правильный PyQt #4

@edwardgra4ev

Description

@edwardgra4ev

Предлагаю реализацию такой какой она должна быть в PyQt5
main.py

import sys

from PyQt5 import QtWidgets
from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo
from PyQt5.QtCore import QIODevice

from ui import Ui_MainWindow


class App(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self) -> None:
        super().__init__()
        self.setupUi(self)

        self.serial = QSerialPort()
        self.serial.setBaudRate(115200)

        self.pos_x = 200
        self.pos_y = 100
        self.list_x = [x for x in range(100)]
        self.list_y = [x for x in range(100)]

        self.serial.readyRead.connect(self.__one_read)

        self.openB.clicked.connect(self.__on_open)
        self.closeB.clicked.connect(self.__on_close)

        self.ledC.stateChanged.connect(self.__led_control)
        self.fanC.stateChanged.connect(self.__fan_control)
        self.bulbC.stateChanged.connect(self.__bulb_control)
        self.RS.valueChanged.connect(self.__rgb_control)
        self.GS.valueChanged.connect(self.__rgb_control)
        self.BS.valueChanged.connect(self.__rgb_control)
        self.servoK.valueChanged.connect(self.__servo_control)
        self.sendB.clicked.connect(self.__send_text)

    def __add_comL_items(self) -> None:
        """Функция заполнения ComboBox"""
        self.comL.addItems([port.portName() for port in QSerialPortInfo().availablePorts()])

    def __one_read(self) -> None:
        if self.serial.canReadLine():
            rx = self.serial.readLine()
            data = str(rx, 'UTF-8').strip().split(',')
            if data[0] == '0':
                self.lcdN.display(data[1])
                self.tempB.setValue(int(float(data[3]) * 10))
                self.tempL.setText(data[3])
                self.list_y = self.list_y[1:]
                self.list_y.append(int(data[2]))
                self.graph.clear()
                self.graph.plot(self.list_x, self.list_y)
            elif data[0] == '1':
                self.circle.setChecked(True if data[1] == '0' else False)
            elif data[0] == '2':
                self.pos_x += int((int(data[1]) - 512) / 100)
                self.pos_y += int((int(data[2]) - 512) / 100)
                self.circle.setGeometry(self.pos_x, self.pos_y, 20, 20)

    def __on_open(self) -> None:
        self.serial.setPortName(self.comL.currentText())
        self.serial.open(QIODevice.ReadWrite)

    def __on_close(self) -> None:
        self.serial.close()

    def __serial_send(self, arr: list) -> None:
        txs = ""
        for val in arr:
            txs += f"{str(val)},"
        txs = txs[:-1]
        txs += ';'
        self.serial.write(txs.encode())

    def __check_val(self, number: int) -> int:
        if number == 2:
            number = 1
        return number

    def __led_control(self, val: int) -> None:
        self.__serial_send([0, self.__check_val(val)])

    def __fan_control(self, val: int) -> None:
        self.__serial_send([3, self.__check_val(val)])

    def __bulb_control(self, val: int) -> None:
        self.__serial_send([4, self.__check_val(val)])

    def __servo_control(self, val: int) -> None:
        self.__serial_send([2, val])

    def __rgb_control(self) -> None:
        self.__serial_send([1, self.RS.value(), self.GS.value(), self.BS.value()])

    def __send_text(self) -> None:
        self.serial.write(f"5,{self.textF.displayText()};".encode())


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = App()
    window.show()
    app.exec_()

ui.py

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

# Form implementation generated from reading ui file 'design.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(553, 314)
        MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(10, 70, 151, 221))
        self.groupBox.setObjectName("groupBox")
        self.widget = QtWidgets.QWidget(self.groupBox)
        self.widget.setGeometry(QtCore.QRect(10, 10, 131, 181))
        self.widget.setObjectName("widget")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.RS = QtWidgets.QSlider(self.widget)
        self.RS.setMaximum(255)
        self.RS.setOrientation(QtCore.Qt.Vertical)
        self.RS.setObjectName("RS")
        self.horizontalLayout_3.addWidget(self.RS)
        self.GS = QtWidgets.QSlider(self.widget)
        self.GS.setMaximum(255)
        self.GS.setOrientation(QtCore.Qt.Vertical)
        self.GS.setObjectName("GS")
        self.horizontalLayout_3.addWidget(self.GS)
        self.BS = QtWidgets.QSlider(self.widget)
        self.BS.setMaximum(255)
        self.BS.setOrientation(QtCore.Qt.Vertical)
        self.BS.setObjectName("BS")
        self.horizontalLayout_3.addWidget(self.BS)
        self.widget1 = QtWidgets.QWidget(self.groupBox)
        self.widget1.setGeometry(QtCore.QRect(30, 200, 111, 20))
        self.widget1.setObjectName("widget1")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.widget1)
        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.label = QtWidgets.QLabel(self.widget1)
        self.label.setObjectName("label")
        self.horizontalLayout_4.addWidget(self.label)
        self.label_2 = QtWidgets.QLabel(self.widget1)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout_4.addWidget(self.label_2)
        self.label_3 = QtWidgets.QLabel(self.widget1)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_4.addWidget(self.label_3)
        self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_2.setGeometry(QtCore.QRect(0, 0, 281, 41))
        self.groupBox_2.setObjectName("groupBox_2")
        self.widget2 = QtWidgets.QWidget(self.groupBox_2)
        self.widget2.setGeometry(QtCore.QRect(10, 10, 271, 31))
        self.widget2.setObjectName("widget2")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget2)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.comL = QtWidgets.QComboBox(self.widget2)
        self.comL.setObjectName("comL")
        self.horizontalLayout.addWidget(self.comL)
        self.openB = QtWidgets.QPushButton(self.widget2)
        self.openB.setObjectName("openB")
        self.horizontalLayout.addWidget(self.openB)
        self.closeB = QtWidgets.QPushButton(self.widget2)
        self.closeB.setObjectName("closeB")
        self.horizontalLayout.addWidget(self.closeB)
        self.servoK = QtWidgets.QDial(self.centralwidget)
        self.servoK.setGeometry(QtCore.QRect(210, 180, 101, 91))
        self.servoK.setMaximum(180)
        self.servoK.setObjectName("servoK")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(240, 270, 47, 13))
        self.label_4.setObjectName("label_4")
        self.tempB = QtWidgets.QProgressBar(self.centralwidget)
        self.tempB.setGeometry(QtCore.QRect(170, 90, 31, 201))
        self.tempB.setMinimum(200)
        self.tempB.setMaximum(400)
        self.tempB.setProperty("value", 199)
        self.tempB.setOrientation(QtCore.Qt.Vertical)
        self.tempB.setObjectName("tempB")
        self.tempL = QtWidgets.QLabel(self.centralwidget)
        self.tempL.setGeometry(QtCore.QRect(170, 70, 47, 13))
        self.tempL.setObjectName("tempL")
        self.lcdN = QtWidgets.QLCDNumber(self.centralwidget)
        self.lcdN.setGeometry(QtCore.QRect(330, 40, 211, 71))
        self.lcdN.setObjectName("lcdN")
        self.circle = QtWidgets.QRadioButton(self.centralwidget)
        self.circle.setGeometry(QtCore.QRect(260, 160, 41, 21))
        self.circle.setText("")
        self.circle.setIconSize(QtCore.QSize(0, 0))
        self.circle.setObjectName("circle")
        self.graph = PlotWidget(self.centralwidget)
        self.graph.setGeometry(QtCore.QRect(330, 120, 211, 161))
        self.graph.setObjectName("graph")
        self.widget3 = QtWidgets.QWidget(self.centralwidget)
        self.widget3.setGeometry(QtCore.QRect(10, 40, 231, 21))
        self.widget3.setObjectName("widget3")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget3)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.ledC = QtWidgets.QCheckBox(self.widget3)
        self.ledC.setObjectName("ledC")
        self.horizontalLayout_2.addWidget(self.ledC)
        self.fanC = QtWidgets.QCheckBox(self.widget3)
        self.fanC.setObjectName("fanC")
        self.horizontalLayout_2.addWidget(self.fanC)
        self.bulbC = QtWidgets.QCheckBox(self.widget3)
        self.bulbC.setObjectName("bulbC")
        self.horizontalLayout_2.addWidget(self.bulbC)
        self.widget4 = QtWidgets.QWidget(self.centralwidget)
        self.widget4.setGeometry(QtCore.QRect(210, 90, 111, 51))
        self.widget4.setObjectName("widget4")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget4)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.textF = QtWidgets.QLineEdit(self.widget4)
        self.textF.setObjectName("textF")
        self.verticalLayout.addWidget(self.textF)
        self.sendB = QtWidgets.QPushButton(self.widget4)
        self.sendB.setObjectName("sendB")
        self.verticalLayout.addWidget(self.sendB)
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.groupBox.setTitle(_translate("MainWindow", "RGB"))
        self.label.setText(_translate("MainWindow", "R"))
        self.label_2.setText(_translate("MainWindow", "G"))
        self.label_3.setText(_translate("MainWindow", "B"))
        self.groupBox_2.setTitle(_translate("MainWindow", "Serial"))
        self.openB.setText(_translate("MainWindow", "OPEN"))
        self.closeB.setText(_translate("MainWindow", "CLOSE"))
        self.label_4.setText(_translate("MainWindow", "SERVO"))
        self.tempL.setText(_translate("MainWindow", "0.0"))
        self.ledC.setText(_translate("MainWindow", "LED"))
        self.fanC.setText(_translate("MainWindow", "FAN"))
        self.bulbC.setText(_translate("MainWindow", "BULB"))
        self.sendB.setText(_translate("MainWindow", "SEND"))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions