Python3和pyqt5實現控制元件資料動態顯示方式
阿新 • • 發佈:2020-01-09
最近筆者在做一個pyqt5的介面,由於在日常生活中,一些實際運用的場合都需要對資料進行實時的重新整理,例如對某個數值的監控,水溫,室溫的監控等等,都需要實時的重新整理控制元件顯示的資料。
對於實現這樣的一種功能,pyqt5在面板生成的同時就固定住了UI中的資料,例如我們產生一個QLineEdit控制元件,然後佈局在面板上,但是控制元件中的資料是固定的,如果這個資料是實時更新的,想要改變空間中的資料時,就要去重新整理面板,pyqt5提供了一個QApplication.processEvents()的命令來重新整理整個面板,但是要完成資料的動態顯示,則要不斷的去呼叫這個函式來重新整理面板,同樣,以使用多執行緒去重新整理面板上的資料,但是通過搜尋各種大佬的部落格等,發現了pyqt5多執行緒重新整理的各種問題,即大佬主要使用多執行緒來對控制元件顯示的資料進行實時的重新整理。 本文旨在演示一種使用定時器來重新整理控制元件實現資料的方法,具體程式碼如下:
import sys import random import numpy as np from time import sleep import datetime from PyQt5 import QtWidgets from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import *
定義資料生成執行緒,該執行緒主要目的是不斷生成隨機數,用來模擬不斷採集資料
class WorkThread(QThread): # 初始化執行緒 def __int__(self): super(WorkThread,self).__init__() #執行緒執行函式 def run(self): while True: global T_value global P_value T_value = random.randint(200,225) P_value = random.randint(150,200) print(T_value,P_value) sleep(3)
定義顯示面板
class plotwindows(QtWidgets.QWidget): def __init__(self): super(plotwindows,self).__init__() layout = QFormLayout() self.edita3 = QLineEdit() self.edita4 = QLineEdit() self.edita5 = QLineEdit() layout.addRow("A數值",self.edita3) layout.addRow("B數值",self.edita4) layout.addRow("C數值",self.edita5) self.setLayout(layout) self.Mytimer()
定義定時器,使用定時器每隔一段時間來出發update函式,從而重新整理資料
def Mytimer(self): timer = QTimer(self) timer.timeout.connect(self.update) timer.start(100)
重新整理函式
def update(self): self.edita3.setText(str(T_value)) self.edita4.setText(str(P_value)) global SUM_value SUM_value = T_value + P_value self.edita5.setText(str(SUM_value)) def mainwindows(): app =QtWidgets.QApplication(sys.argv) new = plotwindows() new.show() sys.exit(app.exec_()) if __name__ == "__main__": workThread = WorkThread() workThread.start() mainwindows()
可以看到,子執行緒不斷的生成資料,同時定時器以一種不斷呼叫重新整理函式的方法來實現對控制元件顯示資料的重新整理,這樣就不用再建立新執行緒的情況下實現重新整理控制元件顯示的功能。
以上這篇Python3和pyqt5實現控制元件資料動態顯示方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。