溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python3和pyqt5實現(xiàn)控件數(shù)據(jù)動態(tài)顯示方式

發(fā)布時間:2020-09-30 18:40:09 來源:腳本之家 閱讀:294 作者:lbllich 欄目:開發(fā)技術(shù)

最近筆者在做一個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()

Python3和pyqt5實現(xiàn)控件數(shù)據(jù)動態(tài)顯示方式

Python3和pyqt5實現(xiàn)控件數(shù)據(jù)動態(tài)顯示方式

可以看到,子線程不斷的生成數(shù)據(jù),同時定時器以一種不斷調(diào)用刷新函數(shù)的方法來實現(xiàn)對控件顯示數(shù)據(jù)的刷新,這樣就不用再建立新線程的情況下實現(xiàn)刷新控件顯示的功能。

以上這篇Python3和pyqt5實現(xiàn)控件數(shù)據(jù)動態(tài)顯示方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責(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)容。

AI