PyQT5之PyQtGraph實時資料顯示

星空28發表於2024-06-13

例項1:CPU使用率實時展示

from PyQt5 import QtWidgets,QtCore,QtGui
import pyqtgraph as pg
import sys
import traceback
import psutil


class MainUi(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("CPU使用率監控")
        self.main_widget = QtWidgets.QWidget()  # 建立一個主部件
        self.main_layout = QtWidgets.QGridLayout()  # 建立一個網格佈局
        self.main_widget.setLayout(self.main_layout)  # 設定主部件的佈局為網格
        self.setCentralWidget(self.main_widget)  # 設定視窗預設部件

        self.plot_widget = QtWidgets.QWidget()  # 例項化一個widget部件作為K線圖部件
        self.plot_layout = QtWidgets.QGridLayout()  # 例項化一個網格佈局層
        self.plot_widget.setLayout(self.plot_layout)  # 設定K線圖部件的佈局層
        self.plot_plt = pg.PlotWidget()  # 例項化一個繪圖部件
        self.plot_plt.showGrid(x=True,y=True) # 顯示圖形網格
        self.plot_layout.addWidget(self.plot_plt)  # 新增繪圖部件到K線圖部件的網格佈局層
        # 將上述部件新增到佈局層中
        self.main_layout.addWidget(self.plot_widget, 1, 0, 3, 3)

        self.setCentralWidget(self.main_widget)
        self.plot_plt.setYRange(max=100,min=0)
        self.data_list = []
        self.timer_start()

    # 啟動定時器 時間間隔秒
    def timer_start(self):
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.get_cpu_info)
        self.timer.start(1000)

    # 獲取CPU使用率
    def get_cpu_info(self):
        try:
            cpu = "%0.2f" % psutil.cpu_percent(interval=1)
            self.data_list.append(float(cpu))
            print(float(cpu))
            self.plot_plt.plot().setData(self.data_list,pen='g')
        except Exception as e:
            print(traceback.print_exc())


def main():
    app = QtWidgets.QApplication(sys.argv)
    gui = MainUi()
    gui.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()


例項2:氣溫資料實時展示

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import pyqtgraph as pg
import sys
from random import randint


class MainWindow(QMainWindow):

    def __init__(self):
        super().__init__()

        self.setWindowTitle('pyqtgraph作圖')

        # 建立 PlotWidget 物件
        self.pw = pg.PlotWidget()

        # 設定圖表標題
        self.pw.setTitle("氣溫趨勢",
                         color='#008080',
                         size='12pt')

        # 設定上下左右的label
        self.pw.setLabel("left","氣溫(攝氏度)")
        self.pw.setLabel("bottom","時間")

        # 設定Y軸 刻度 範圍
        self.pw.setYRange(min=-10, # 最小值
                          max=50)  # 最大值

        # 顯示錶格線
        self.pw.showGrid(x=True, y=True)

        # 背景色改為白色
        self.pw.setBackground('w')

        # 設定Y軸 刻度 範圍
        self.pw.setYRange(min=-10, # 最小值
                          max=50)  # 最大值

        # 居中顯示 PlotWidget
        self.setCentralWidget(self.pw)

        # 實時顯示應該獲取 PlotDataItem物件, 呼叫其setData方法,
        # 這樣只重新plot該曲線,效能更高
        self.curve = self.pw.plot(
            pen=pg.mkPen('r', width=1)
        )

        self.i = 0
        self.x = [] # x軸的值
        self.y = [] # y軸的值

        # 啟動定時器,每隔1秒通知重新整理一次資料
        self.timer = QTimer()   # QtCore
        self.timer.timeout.connect(self.updateData)
        self.timer.start(1000)

    def updateData(self):
        self.i += 1
        self.x.append(self.i)
        # 建立隨機溫度值
        self.y.append(randint(10, 30))

        # plot data: x, y values
        self.curve.setData(self.x, self.y)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = MainWindow()
    main.show()
    app.exec_()

相關文章