您好,登錄后才能下訂單哦!
最近筆者在做一個pyqt5的界面,由于在日常生活中,一些實際運用的場合都需要對數(shù)據(jù)進行實時的刷新,例如對某個數(shù)值的監(jiān)控,水溫,室溫的監(jiān)控等等,都需要實時的刷新控件顯示的數(shù)據(jù)。
對于實現(xiàn)這樣的一種功能,pyqt5在面板生成的同時就固定住了UI中的數(shù)據(jù),例如我們產(chǎn)生一個QLineEdit控件,然后布局在面板上,但是控件中的數(shù)據(jù)是固定的,如果這個數(shù)據(jù)是實時更新的,想要改變空間中的數(shù)據(jù)時,就要去刷新面板,pyqt5提供了一個QApplication.processEvents()的命令來刷新整個面板,但是要完成數(shù)據(jù)的動態(tài)顯示,則要不斷的去調(diào)用這個函數(shù)來刷新面板,同樣,以使用多線程去刷新面板上的數(shù)據(jù),但是通過搜索各種大佬的博客等,發(fā)現(xiàn)了pyqt5多線程刷新的各種問題,即大佬主要使用多線程來對控件顯示的數(shù)據(jù)進行實時的刷新。 本文旨在演示一種使用定時器來刷新控件實現(xiàn)數(shù)據(jù)的方法,具體代碼如下:
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 *
定義數(shù)據(jù)生成線程,該線程主要目的是不斷生成隨機數(shù),用來模擬不斷采集數(shù)據(jù)
class WorkThread(QThread): # 初始化線程 def __int__(self): super(WorkThread, self).__init__() #線程運行函數(shù) 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數(shù)值", self.edita3) layout.addRow("B數(shù)值", self.edita4) layout.addRow("C數(shù)值", self.edita5) self.setLayout(layout) self.Mytimer()
定義定時器,使用定時器每隔一段時間來出發(fā)update函數(shù),從而刷新數(shù)據(jù)
def Mytimer(self): timer = QTimer(self) timer.timeout.connect(self.update) timer.start(100)
刷新函數(shù)
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()
可以看到,子線程不斷的生成數(shù)據(jù),同時定時器以一種不斷調(diào)用刷新函數(shù)的方法來實現(xiàn)對控件顯示數(shù)據(jù)的刷新,這樣就不用再建立新線程的情況下實現(xiàn)刷新控件顯示的功能。
以上這篇Python3和pyqt5實現(xiàn)控件數(shù)據(jù)動態(tài)顯示方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。