使用实时数据更新PyQt5 GUI

时间:2018-04-22 23:09:32

标签: python qt pyqt5 qt-designer

我使用QtDesigner创建了一个PyQt5 GUI并将其转换为Python。我计划更新并显示来自Raspberry Pi的传感器读数的值。由于GUI处于循环中,因此我无法从该循环外部更新数据。目前我使用下面的代码,我使用QTimer小部件,每个给定的间隔执行该功能。这个解决方案是否合适?还有哪些其他方法可以完成这项任务?

from PyQt5 import QtCore, QtGui, QtWidgets
from uimainwindow import Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):

    numTest=0;

    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setupUi(self)
        QtCore.QTimer.singleShot(1000, self.getSensorValue)

    def getSensorValue(self):
        print(self.numTest)
        self.numTest=self.numTest+1
        QtCore.QTimer.singleShot(1000, self.getSensorValue)

    if __name__=="__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        w=MainWindow()
        w.show()
        sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:0)

使用定期调用成员函数的QTimer

  1. 制作QTimer

  2. 的成员变量
  3. QTimer的间隔设置为预期的延迟。

  4. getSensorValue()作为信号处理程序连接到QTimer.timeout()

  5. 启动QTimer成员。

  6. 演示test-QTimer.py

    #!/usr/bin/python3
    
    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
    from PyQt5.QtCore import QTimer
    
    class MainWindow(QMainWindow):
      # constructor
      def __init__(self):
        QMainWindow.__init__(self)
        # counter
        self.i = 0
        # add QLabel
        self.qLbl = QLabel('Not yet initialized')
        self.setCentralWidget(self.qLbl)
        # make QTimer
        self.qTimer = QTimer()
        # set interval to 1 s
        self.qTimer.setInterval(1000) # 1000 ms = 1 s
        # connect timeout signal to signal handler
        self.qTimer.timeout.connect(self.getSensorValue)
        # start timer
        self.qTimer.start()
    
      def getSensorValue(self):
        self.i += 1
        # print('%d. call of getSensorValue()' % self.i)
        self.qLbl.setText('%d. call of getSensorValue()' % self.i)
    
    qApp = QApplication(sys.argv)
    # setup GUI
    qWin = MainWindow()
    qWin.show()
    # run application
    sys.exit(qApp.exec_())
    

    在Windows 10上的cygwin中测试:

    Snapshot of test-QTimer.py