如何在基于PyQt5的QTreeView中集成实时数据流?

时间:2018-03-06 13:15:08

标签: python qt while-loop pyqt pyqt5

我想做什么:

我正在尝试制作一个实时TreeWidget来监控设备的速度和ETA。我在PyQt5中创建了一个非常基本的GUI(代码如下)。

我想获得第一列的实时时间(在同一单元格中每秒刷新一次),在第二列中,我将从websocket获取数据,每隔1000毫秒刷新数据第二列和第三列。

我已经做了什么:

我放了一个while循环来迭代第一列的数据(这很荒谬)。但是一旦while循环结束,就会显示最后一个值。这很好。我想用我的GUI连接这种 while循环并行方式。因此它可以实时获取数据。搜索到处都是,但我只得到了PyQt5中一个名为QDatastream的方法的提示,我不熟悉。

我想知道是否可以像我提到的那样在treewidget中查看实时数据。如果没有,请告诉我是否应该去探索QDatastream。

感谢您阅读我的问题。任何帮助将不胜感激。

代码:

from PyQt5 import QtCore, QtGui, QtWidgets
import time

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.treeWidget = QtWidgets.QTreeWidget(Form)
        self.treeWidget.setGeometry(QtCore.QRect(10, 10, 381, 281))
        self.treeWidget.setObjectName("treeWidget")
        item_0 = QtWidgets.QTreeWidgetItem(self.treeWidget)

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.treeWidget.headerItem().setText(0, _translate("Form", "Time(s)"))
        self.treeWidget.headerItem().setText(1, _translate("Form", "Speed"))
        self.treeWidget.headerItem().setText(2, _translate("Form", "ETA"))
        __sortingEnabled = self.treeWidget.isSortingEnabled()
        self.treeWidget.setSortingEnabled(False)
        x = 0
        while x < 10:
            self.treeWidget.topLevelItem(0).setText(0, _translate("MainWindow", str(x)))
            x += 1
            time.sleep(1)
        self.treeWidget.topLevelItem(0).setText(1, _translate("Form", "s1"))
        self.treeWidget.topLevelItem(0).setText(2, _translate("Form", "eta1"))
        self.treeWidget.setSortingEnabled(__sortingEnabled)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

0 个答案:

没有答案