使用Live D更新PyQt5 GUI

2024-06-17 08:39:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用QtDesigner创建了一个pyqt5gui并将其转换为Python。我正计划更新并显示从树莓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_())

Tags: fromimportselfuiinit部件defsys
1条回答
网友
1楼 · 发布于 2024-06-17 08:39:30

要使用定期调用成员函数的QTimer,请执行以下操作:

  1. 生成QTimer的成员变量。

  2. {cd1>打算延迟}。

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

  4. 开始QTimer成员。

演示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

相关问题 更多 >