PyQt5 programada de procesamiento de sucesos de la información que se muestra en el mando

A veces, con el fin de reflejar el efecto de la demora, o un procesamiento multi-evento que se requiere en un cuadro de texto o editar tablas y otra ventana de control, la pantalla cada pocos segundos o unos pocos segundos Retardo a la salida de una parte de los datos, o se puede decir para llevar a cabo cada pocos segundos la siguiente línea de código! Para conseguir este efecto, los dos métodos es la clave time.sleep () y las processEvents (), consulte particularmente el código siguiente:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.QtWidgets import *
import time

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(390, 500)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setObjectName("textEdit")
        self.gridLayout.addWidget(self.textEdit, 1, 1, 1, 1)
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setRowCount(4)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        self.gridLayout.addWidget(self.tableWidget, 0, 1, 1, 1)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setMaximumSize(QtCore.QSize(200, 16777215))
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 2, 1, 1, 1)
        self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 18))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        # 表格属性设置
        self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch)
        # 【开始】按钮
        self.pushButton.clicked.connect(self.pushButton_Clicked)

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

    # 设置每隔几秒输出数据
    def pushButton_Clicked(self):
        self.textEdit.setText("获取基金数据中...")
        # 刷新页面
        QApplication.processEvents()
        item = [["110003", "易方达上证50", "-1.97%"], ["005918", "天弘沪深300", "-3.15%"], ["001513", "易方达信息产业", "-4.69%"]]
        for i in range(3):
            # 每隔两秒执行一次以下代码,直到循环结束
            time.sleep(2)
            self.textEdit.append("获取基金" + item[i][1] + "\n...")
            for j in range(3):
                self.tableWidget.setItem(i, j, QtWidgets.QTableWidgetItem(item[i][j]))
            # 刷新页面
            QtWidgets.QApplication.processEvents()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        item = self.tableWidget.verticalHeaderItem(0)
        item.setText(_translate("MainWindow", "1"))
        item = self.tableWidget.verticalHeaderItem(1)
        item.setText(_translate("MainWindow", "2"))
        item = self.tableWidget.verticalHeaderItem(2)
        item.setText(_translate("MainWindow", "3"))
        item = self.tableWidget.verticalHeaderItem(3)
        item.setText(_translate("MainWindow", "4"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "基金编号"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "基金名称"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "基金净值"))
        self.pushButton.setText(_translate("MainWindow", "开始"))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

El código de la llave es el siguiente, con el fin de darse cuenta de la necesidad de diseñar un bucle cada 2 segundos para ejecutar código en un bucle, de por qué la función que se llama dos veces para actualizar la página, ya que cada llama una vez QApplication.processEvents () actualiza la página, antes el efecto del código aparece en la ventana de visualización de todos los datos en la ventana, pero antes de la salida del lazo a un texto cuadro de texto debe aparecer en primer lugar, por lo que actualizar la página antes del bucle, de lo contrario el contenido del ciclo y la primera vez que aparecen juntos ! Mientras se visualiza la segunda llamada a este efecto que unas pocas líneas de código aspirados función de bucle realiza cada 2 segundos generados, en el que el cuadro de texto de salida utilizando append () con el fin de no cubrir el texto antes.

    # 设置每隔几秒输出数据
    def pushButton_Clicked(self):
        self.textEdit.setText("获取基金数据中...")
        # 刷新页面
        QApplication.processEvents()
        item = [["110003", "易方达上证50", "-1.97%"], ["005918", "天弘沪深300", "-3.15%"], ["001513", "易方达信息产业", "-4.69%"]]
        for i in range(3):
            # 每隔两秒执行一次以下代码,直到循环结束
            time.sleep(2)
            self.textEdit.append("获取基金" + item[i][1] + "\n...")
            for j in range(3):
                self.tableWidget.setItem(i, j, QtWidgets.QTableWidgetItem(item[i][j]))
            # 刷新页面
            QtWidgets.QApplication.processEvents()

Que operan resultados que se muestran a continuación (los contenidos de la red del Fondo, por ejemplo, me conmemorar este difícil Fondo en el pozo de años, ooo, ooo, cayó por debajo de la charla abajo): Debido a que el efecto no es el mapa en movimiento, en realidad muestra: Haga clic [inicio], el primer texto aparece el cuadro de la primera línea de texto, y que muestra los segundos tres líneas después de cada 2 segundos, y la información en pantalla de la primera fila de la tabla, y luego cada dos segundos es de cinco líneas, y un cuarto cuadro de texto la segunda línea de la información de la tabla, y así sucesivamente, hasta que el extremo del lazo!
Aquí Insertar imagen Descripción
Aunque existen propio temporizador QTimer PyQt5, pero no creo que cómo usarlo para lograr los efectos anteriores, así que no hay uso de este método, si una mejor manera para recibir a la dirección del gran Dios!

Publicado 17 artículos originales · ganado elogios 3 · Vistas 1800

Supongo que te gusta

Origin blog.csdn.net/weixin_43350361/article/details/105075801
Recomendado
Clasificación