Új hozzászólás Aktív témák

  • Silεncε

    őstag

    Sziasztok!! Lenne egy program, amivel már napok óta nem bírok zöld ágra vergődni. A feladata az lenne, hogy kliensként szolgáljon egy másik projecthez. A másik oldalon egy Teensy van, ami ESP8826-on keresztül lök adatot nekünk wifin (TCP protokollal). A "kliens" feladata az lenne, hogy fogadja a TCP-n érkező adatot, majd ezt kirajzolja egy PyQtGraph vonalgrafikonra. Van is már egy működő verzió, de szeretnénk neki GUI-t is csinálni. Ugye erre a legkézenfekvőbb ebben az esetben a PyQt és ez működik is nagyjából. Azonban azt sehogyan sem tudom megoldani, hogy az érkező adatokat a grafikon real-time rajzolja ki, ebben kérném a segítségeteket. A kód többszálúsítva van, idáig eljutottam már, ezt QThread segítségével csináltam meg. Tudna nekem segíteni valaki, hogy mit rontok el? Nem konkrét megoldásra lenne szükségem, inkább iránymutatásra (tanulni szeretnék, nem készen megkapni a megoldást). Remélem van valaki, aki tud nekem segíteni, előre is köszönöm!!

    import sys
    import socket
    from pyqtgraph import PlotWidget
    from PyQt5 import QtCore, QtWidgets, QtGui
    from PyQt5.QtCore import QThread

    IP = ""
    PORT = 333
    DATA = [] #ez az, ahova a tcp bepakolja az adatot, és innen is veszi ki a grafikon is; egyszerre használja a kettő

    class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(280, 248)
    #MainWindow.setWindowIcon(QtGui.QIcon('wifi.png'))
    self.connect_button = QtWidgets.QPushButton(MainWindow)
    self.connect_button.setGeometry(QtCore.QRect(150, 10, 91, 23))
    self.connect_button.setObjectName("connect_button")
    self.IPinput = QtWidgets.QLineEdit(MainWindow)
    self.IPinput.setGeometry(QtCore.QRect(10, 10, 131, 20))
    self.IPinput.setObjectName("IPinput")
    self.plotItem = PlotWidget(MainWindow)
    self.plotItem.setGeometry(QtCore.QRect(10, 40, 256, 192))
    self.plotItem.setObjectName("graphicsView")

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

    def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "Client"))
    self.connect_button.setText(_translate("MainWindow", "Connect to host"))


    class programManager(QtWidgets.QWidget, Ui_MainWindow):
    def __init__(self):
    super(self.__class__, self).__init__()
    self.setupUi(self)
    self.connect_button.clicked.connect(self.backgroundWorkerManager)
    self.IPinput.textChanged[str].connect(self.onChangedIP)

    def backgroundWorkerManager(self):
    self.bgw = backgroundWorker()
    self.bgw.start()

    self.plotDraw = plotDraw()
    self.plotDraw.start()

    def onChangedIP(self, text):
    global IP
    IP = text

    class plotDraw(QtCore.QThread):
    def __init__(self):
    pass

    def __del__(self):
    self.wait()

    def run(self):
    pass #ide akartam a grafikon frissítését beilleszteni, de nem működött


    class backgroundWorker(QtCore.QThread):
    def __init__(self):
    QtCore.QThread.__init__(self)

    def __del__(self):
    self.wait()

    def run(self):
    print(IP)
    self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.sock.connect((IP, PORT))
    MESSAGE = "HELLO I\'M CONNECTED"
    self.sock.send(MESSAGE.encode())
    while True:
    DATA.append(int(self.sock.recv(2048)))
    print(DATA)
    self.sock.close()

    def main():
    app = QtWidgets.QApplication(sys.argv)
    gui = programManager()
    gui.show()
    sys.exit(app.exec())

    if __name__ == '__main__':
    main()

Új hozzászólás Aktív témák