Получение информации об использовании системы и отображение ее на графике

Каким образом можно построить точечный график занятого места на диске, который обновляется каждую секунду? Буду рад помощи!

Нужен примерно такой график, так как за работу приложения, не будет значительно меняться место на диске(разве что мы что-то удалим).

введите сюда описание изображения


Ответы (2 шт):

Автор решения: S. Nick

Хорошо, я вам покажу возможный вариант решения вашей задумки, но для вас будет и домашнее задание.

Вам надо изучить psutil (python system and process utilities) - это кроссплатформенная библиотека для получения информации о запущенных процессах и использовании системы (ЦП, память, диски, сеть, датчики) в Python.

А затем заменить: psutil.virtual_memory() Возвращает статистику использования системной памяти в виде именованного кортежа, включая следующие поля, выраженные в байтах. Основные показатели ...

на psutil.disk_usage(path) Возвращает статистику использования диска о разделе, который содержит указанный путь в виде именованного кортежа, включая общее, используемое и свободное пространство, выраженное в байтах, плюс процент использования.

Читаем здесь Disks


main.py

import sys
import os
import psutil                                         # pip install psutil
import platform
from pathlib import Path

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *

from pyqtgraph import PlotWidget
import pyqtgraph as pg

from q1354387_main_ui import Ui_MainWindow

import numpy as np
from collections import deque


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        
        self.traces = dict()
        self.timestamp = 0
        self.timeaxis = []
        self.cpuaxis = []
        self.ramaxis = []

        self.current_timer_graph = None
        self.graph_lim = 15
        self.deque_timestamp = deque([], maxlen=self.graph_lim+20)
        self.deque_cpu = deque([], maxlen=self.graph_lim+20)
        self.deque_ram = deque([], maxlen=self.graph_lim+20)
        self.ui.label.setText(
            f"{platform.system()} {platform.machine()}")
        self.ui.label_2.setText(
            f"Processor: {platform.processor()}")

        self.graphwidget1 = PlotWidget(title="CPU percent")
        x1_axis = self.graphwidget1.getAxis('bottom')
        x1_axis.setLabel(text='Time since start (s)')
        y1_axis = self.graphwidget1.getAxis('left')
        y1_axis.setLabel(text='Percent')

        self.graphwidget2 = PlotWidget(title="RAM percent")
        x2_axis = self.graphwidget2.getAxis('bottom')
        x2_axis.setLabel(text='Time since start (s)')
        y2_axis = self.graphwidget2.getAxis('left')
        y2_axis.setLabel(text='Percent')

        self.ui.pushButton.clicked.connect(self.show_cpu_graph)
        self.ui.pushButton_2.clicked.connect(self.show_ram_graph)
        
        self.ui.gridLayout.addWidget(self.graphwidget1, 0, 0, 1, 3)
        self.ui.gridLayout.addWidget(self.graphwidget2, 0, 0, 1, 3)

        self.current_timer_systemStat = QtCore.QTimer()
        self.current_timer_systemStat.timeout.connect(
            self.getsystemStatpercent)
        self.current_timer_systemStat.start(1000)

        self.getsystemStatpercent() 
        self.show_cpu_graph()

    def getsystemStatpercent(self):
        self.cpu_percent = psutil.cpu_percent()
        self.ram_percent = psutil.virtual_memory().percent
        self.setValue(self.cpu_percent, self.ui.labelPercentageCPU,
                      self.ui.circularProgressCPU, "rgba(85, 170, 255, 255)")
        self.setValue(self.ram_percent, self.ui.labelPercentageRAM,
                      self.ui.circularProgressRAM, "rgba(255, 0, 127, 255)")

    def start_cpu_graph(self):
        if self.current_timer_graph:
            self.current_timer_graph.stop()
            self.current_timer_graph.deleteLater()
            self.current_timer_graph = None
            
        self.current_timer_graph = QtCore.QTimer()
        self.current_timer_graph.timeout.connect(self.update_cpu)
        self.current_timer_graph.start(1000)

    def update_cpu(self):
        self.timestamp += 1
        self.deque_timestamp.append(self.timestamp)
        self.deque_cpu.append(self.cpu_percent)
        self.deque_ram.append(self.ram_percent)
        timeaxis_list = list(self.deque_timestamp)
        cpu_list = list(self.deque_cpu)

        if self.timestamp > self.graph_lim:
            self.graphwidget1.setRange(
                xRange=[self.timestamp-self.graph_lim+1, self.timestamp], 
                yRange=[min(cpu_list[-self.graph_lim:]), max(cpu_list[-self.graph_lim:])]
            )
        self.set_plotdata(name="cpu", data_x=timeaxis_list, data_y=cpu_list)

    def start_ram_graph(self):
        if self.current_timer_graph:
            self.current_timer_graph.stop()
            self.current_timer_graph.deleteLater()
            self.current_timer_graph = None
        self.current_timer_graph = QtCore.QTimer()
        self.current_timer_graph.timeout.connect(self.update_ram)
        self.current_timer_graph.start(1000)

    def update_ram(self):
        self.timestamp += 1

        self.deque_timestamp.append(self.timestamp)
        self.deque_cpu.append(self.cpu_percent)
        self.deque_ram.append(self.ram_percent)
        timeaxis_list = list(self.deque_timestamp)
        ram_list = list(self.deque_ram)

        if self.timestamp > self.graph_lim:
            self.graphwidget2.setRange(
                xRange=[self.timestamp-self.graph_lim+1, self.timestamp], 
                yRange=[min(ram_list[-self.graph_lim:]), max(ram_list[-self.graph_lim:])]
            )
        self.set_plotdata(name="ram", data_x=timeaxis_list,
                          data_y=ram_list)

    def show_cpu_graph(self):
        self.graphwidget2.hide()
        self.graphwidget1.show()
        self.start_cpu_graph()
        self.ui.pushButton.setEnabled(False)
        self.ui.pushButton.setStyleSheet("QPushButton {background-color : lightblue;}")
        self.ui.pushButton_2.setEnabled(True)
        self.ui.pushButton_2.setStyleSheet("""
            QPushButton {
                background-color: rgb(255, 44, 174);
                color : white;
            }
        """)

    def show_ram_graph(self):
        self.graphwidget1.hide()
        self.graphwidget2.show()
        self.start_ram_graph()
        self.ui.pushButton_2.setEnabled(False)
        self.ui.pushButton.setEnabled(True)
        self.ui.pushButton_2.setStyleSheet(
            "QPushButton" "{" "background-color : lightblue;" "}"
        )
        self.ui.pushButton.setStyleSheet(
            "QPushButton"
            "{"
            "background-color : rgba(85, 170, 255, 255);"
            "}"
            "QPushButton"
            "{"
            "color : white;"
            "}"
        )

    def set_plotdata(self, name, data_x, data_y):
        if name in self.traces:
            self.traces[name].setData(data_x, data_y)
        else:
            if name == "cpu":
                self.traces[name] = self.graphwidget1.getPlotItem().plot(
                    pen=pg.mkPen((85, 170, 255), width=3))

            elif name == "ram":
                self.traces[name] = self.graphwidget2.getPlotItem().plot(
                    pen=pg.mkPen((255, 0, 127), width=3))

    def setValue(self, value, labelPercentage, progressBarName, color):
        sliderValue = value
        htmlText = """
            <p align="center">
                <span style=" font-size:50pt;">{VALUE}</span>
                <span style=" font-size:40pt; vertical-align:super;">%</span>
            </p>
        """
        labelPercentage.setText(htmlText.replace(
            "{VALUE}", f"{sliderValue:.1f}"))
        self.progressBarValue(sliderValue, progressBarName, color)

    def progressBarValue(self, value, widget, color):
        styleSheet = """
        QFrame{
            border-radius: 110px;
            background-color: qconicalgradient(cx:0.5, cy:0.5, angle:90, stop:{STOP_1} rgba(255, 0, 127, 0), stop:{STOP_2} {COLOR});
        }
        """
        progress = (100 - value) / 100.0
        stop_1 = str(progress - 0.001)
        stop_2 = str(progress)

        if value == 100:
            stop_1 = "1.000"
            stop_2 = "1.000"

        newStylesheet = styleSheet.replace("{STOP_1}", stop_1).replace(
            "{STOP_2}", stop_2).replace("{COLOR}", color)

        widget.setStyleSheet(newStylesheet)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

q1354387_main_ui.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(760, 480)
        MainWindow.setMinimumSize(QtCore.QSize(760, 480))
        MainWindow.setMaximumSize(QtCore.QSize(760, 480))
        MainWindow.setStyleSheet("background-color: rgb(77, 77, 127);")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.circularProgressBar_Main = QtWidgets.QFrame(self.centralwidget)
        self.circularProgressBar_Main.setGeometry(QtCore.QRect(20, 60, 240, 240))
        self.circularProgressBar_Main.setStyleSheet("background-color: none;")
        self.circularProgressBar_Main.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.circularProgressBar_Main.setFrameShadow(QtWidgets.QFrame.Raised)
        self.circularProgressBar_Main.setObjectName("circularProgressBar_Main")
        self.circularProgressCPU = QtWidgets.QFrame(self.circularProgressBar_Main)
        self.circularProgressCPU.setGeometry(QtCore.QRect(10, 10, 220, 220))
        self.circularProgressCPU.setStyleSheet("QFrame{\n"
"    border-radius: 110px;    \n"
"    background-color: qconicalgradient(cx:0.5, cy:0.5, angle:90, stop:0.400 rgba(85, 170, 255, 255), stop:0.395 rgba(255, 255, 255, 0));\n"
"}")
        self.circularProgressCPU.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.circularProgressCPU.setFrameShadow(QtWidgets.QFrame.Raised)
        self.circularProgressCPU.setObjectName("circularProgressCPU")
        self.circularBg = QtWidgets.QFrame(self.circularProgressBar_Main)
        self.circularBg.setGeometry(QtCore.QRect(10, 10, 220, 220))
        self.circularBg.setStyleSheet("QFrame{\n"
"    border-radius: 110px;    \n"
"    background-color: rgba(85, 85, 127, 100);\n"
"}")
        self.circularBg.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.circularBg.setFrameShadow(QtWidgets.QFrame.Raised)
        self.circularBg.setObjectName("circularBg")
        self.circularContainer = QtWidgets.QFrame(self.circularProgressBar_Main)
        self.circularContainer.setGeometry(QtCore.QRect(25, 25, 190, 190))
        self.circularContainer.setBaseSize(QtCore.QSize(0, 0))
        self.circularContainer.setStyleSheet("QFrame{\n"
"    border-radius: 95px;    \n"
"    background-color: rgb(58, 58, 102);\n"
"}")
        self.circularContainer.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.circularContainer.setFrameShadow(QtWidgets.QFrame.Raised)
        self.circularContainer.setObjectName("circularContainer")
        self.layoutWidget = QtWidgets.QWidget(self.circularContainer)
        self.layoutWidget.setGeometry(QtCore.QRect(10, 40, 171, 125))
        self.layoutWidget.setObjectName("layoutWidget")
        self.infoLayout = QtWidgets.QGridLayout(self.layoutWidget)
        self.infoLayout.setContentsMargins(0, 0, 0, 0)
        self.infoLayout.setObjectName("infoLayout")
        self.labelAplicationName = QtWidgets.QLabel(self.layoutWidget)
        font = QtGui.QFont()
        font.setFamily("Helvetica Neue")
        font.setPointSize(10)
        self.labelAplicationName.setFont(font)
        self.labelAplicationName.setStyleSheet("color: #FFFFFF; background-color: none;")
        self.labelAplicationName.setAlignment(QtCore.Qt.AlignCenter)
        self.labelAplicationName.setObjectName("labelAplicationName")
        self.infoLayout.addWidget(self.labelAplicationName, 0, 0, 1, 1)
        self.labelPercentageCPU = QtWidgets.QLabel(self.layoutWidget)
        font = QtGui.QFont()
        font.setFamily("Helvetica Neue")
        font.setPointSize(30)
        self.labelPercentageCPU.setFont(font)
        self.labelPercentageCPU.setStyleSheet("color: rgb(115, 185, 255); padding: 0px; background-color: none;")
        self.labelPercentageCPU.setAlignment(QtCore.Qt.AlignCenter)
        self.labelPercentageCPU.setIndent(-1)
        self.labelPercentageCPU.setObjectName("labelPercentageCPU")
        self.infoLayout.addWidget(self.labelPercentageCPU, 1, 0, 1, 1)
        self.labelCredits = QtWidgets.QLabel(self.layoutWidget)
        font = QtGui.QFont()
        font.setFamily("Helvetica Neue")
        font.setPointSize(8)
        self.labelCredits.setFont(font)
        self.labelCredits.setStyleSheet("color: rgb(148, 148, 216); background-color: none;")
        self.labelCredits.setAlignment(QtCore.Qt.AlignCenter)
        self.labelCredits.setObjectName("labelCredits")
        self.infoLayout.addWidget(self.labelCredits, 2, 0, 1, 1)
        self.circularBg.raise_()
        self.circularProgressCPU.raise_()
        self.circularContainer.raise_()
        self.circularProgressBar_Main_3 = QtWidgets.QFrame(self.centralwidget)
        self.circularProgressBar_Main_3.setGeometry(QtCore.QRect(500, 60, 240, 240))
        self.circularProgressBar_Main_3.setStyleSheet("background-color: none;")
        self.circularProgressBar_Main_3.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.circularProgressBar_Main_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.circularProgressBar_Main_3.setObjectName("circularProgressBar_Main_3")
        self.circularProgressRAM = QtWidgets.QFrame(self.circularProgressBar_Main_3)
        self.circularProgressRAM.setGeometry(QtCore.QRect(10, 10, 220, 220))
        self.circularProgressRAM.setStyleSheet("QFrame{\n"
"    border-radius: 110px;    \n"
"    background-color: qconicalgradient(cx:0.5, cy:0.5, angle:90, stop:0.750 rgba(255, 0, 127, 255), stop:0.745 rgba(255, 255, 255, 0));\n"
"}")
        self.circularProgressRAM.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.circularProgressRAM.setFrameShadow(QtWidgets.QFrame.Raised)
        self.circularProgressRAM.setObjectName("circularProgressRAM")
        self.circularBg_3 = QtWidgets.QFrame(self.circularProgressBar_Main_3)
        self.circularBg_3.setGeometry(QtCore.QRect(10, 10, 220, 220))
        self.circularBg_3.setStyleSheet("QFrame{\n"
"    border-radius: 110px;    \n"
"    background-color: rgba(85, 85, 127, 100);\n"
"}")
        self.circularBg_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.circularBg_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.circularBg_3.setObjectName("circularBg_3")
        self.circularContainer_3 = QtWidgets.QFrame(self.circularProgressBar_Main_3)
        self.circularContainer_3.setGeometry(QtCore.QRect(25, 25, 190, 190))
        self.circularContainer_3.setBaseSize(QtCore.QSize(0, 0))
        self.circularContainer_3.setStyleSheet("QFrame{\n"
"    border-radius: 95px;    \n"
"    background-color: rgb(58, 58, 102);\n"
"}")
        self.circularContainer_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.circularContainer_3.setFrameShadow(QtWidgets.QFrame.Raised)
        self.circularContainer_3.setObjectName("circularContainer_3")
        self.layoutWidget_3 = QtWidgets.QWidget(self.circularContainer_3)
        self.layoutWidget_3.setGeometry(QtCore.QRect(10, 40, 171, 125))
        self.layoutWidget_3.setObjectName("layoutWidget_3")
        self.infoLayout_3 = QtWidgets.QGridLayout(self.layoutWidget_3)
        self.infoLayout_3.setContentsMargins(0, 0, 0, 0)
        self.infoLayout_3.setObjectName("infoLayout_3")
        self.labelAplicationName_3 = QtWidgets.QLabel(self.layoutWidget_3)
        font = QtGui.QFont()
        font.setFamily("Helvetica Neue")
        font.setPointSize(10)
        self.labelAplicationName_3.setFont(font)
        self.labelAplicationName_3.setStyleSheet("color: #FFFFFF; background-color: none;")
        self.labelAplicationName_3.setAlignment(QtCore.Qt.AlignCenter)
        self.labelAplicationName_3.setObjectName("labelAplicationName_3")
        self.infoLayout_3.addWidget(self.labelAplicationName_3, 0, 0, 1, 1)
        self.labelPercentageRAM = QtWidgets.QLabel(self.layoutWidget_3)
        font = QtGui.QFont()
        font.setFamily("Helvetica Neue")
        font.setPointSize(30)
        self.labelPercentageRAM.setFont(font)
        self.labelPercentageRAM.setStyleSheet("color: rgb(255, 44, 174); padding: 0px; background-color: none;")
        self.labelPercentageRAM.setAlignment(QtCore.Qt.AlignCenter)
        self.labelPercentageRAM.setIndent(-1)
        self.labelPercentageRAM.setObjectName("labelPercentageRAM")
        self.infoLayout_3.addWidget(self.labelPercentageRAM, 1, 0, 1, 1)
        self.labelCredits_3 = QtWidgets.QLabel(self.layoutWidget_3)
        font = QtGui.QFont()
        font.setFamily("Helvetica Neue")
        font.setPointSize(8)
        self.labelCredits_3.setFont(font)
        self.labelCredits_3.setStyleSheet("color: rgb(148, 148, 216); background-color: none;")
        self.labelCredits_3.setAlignment(QtCore.Qt.AlignCenter)
        self.labelCredits_3.setObjectName("labelCredits_3")
        self.infoLayout_3.addWidget(self.labelCredits_3, 2, 0, 1, 1)
        self.circularBg_3.raise_()
        self.circularProgressRAM.raise_()
        self.circularContainer_3.raise_()
        self.label_title = QtWidgets.QLabel(self.centralwidget)
        self.label_title.setGeometry(QtCore.QRect(60, 10, 641, 50))
        self.label_title.setStyleSheet("color: rgb(115, 185, 255); background-color: none; font-size: 22px;")
        self.label_title.setAlignment(QtCore.Qt.AlignCenter)
        self.label_title.setObjectName("label_title")
        self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(20, 320, 721, 151))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(330, 160, 113, 32))
        self.pushButton.setStyleSheet("background-color: rgba(85, 170, 255, 255);\n"
"color: white;")
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(330, 200, 113, 32))
        self.pushButton_2.setStyleSheet("background-color: rgb(255, 44, 174);\n"
"color: white;")
        self.pushButton_2.setObjectName("pushButton_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(210, 60, 341, 16))
        self.label.setStyleSheet("color: rgb(115, 185, 255); font-size: 12px; padding-left: 2px; padding-right: 2px; border: none;")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(260, 90, 241, 16))
        self.label_2.setStyleSheet("color: rgb(115, 185, 255); font-size: 12px; padding-left: 2px; padding-right: 2px; border: none;")
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        MainWindow.setCentralWidget(self.centralwidget)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "System Monitor"))
        self.labelAplicationName.setText(_translate("MainWindow", "<strong>CPU</strong> USAGE"))
        self.labelPercentageCPU.setText(_translate("MainWindow", "<p align=\"center\"><span style=\" font-size:50pt;\">60</span><span style=\" font-size:40pt; vertical-align:super;\">%</span></p>"))
        self.labelCredits.setText(_translate("MainWindow", "<html><head/><body><p><br/></p></body></html>"))
        self.labelAplicationName_3.setText(_translate("MainWindow", "<strong>RAM</strong> USAGE"))
        self.labelPercentageRAM.setText(_translate("MainWindow", "<p align=\"center\"><span style=\" font-size:50pt;\">25</span><span style=\" font-size:40pt; vertical-align:super;\">%</span></p>"))
        self.labelCredits_3.setText(_translate("MainWindow", "<html><head/><body><p><br/></p></body></html>"))
        self.label_title.setText(_translate("MainWindow", "System Monitor"))
        self.pushButton.setText(_translate("MainWindow", "Show CPU Graph"))
        self.pushButton_2.setText(_translate("MainWindow", "Show RAM Graph"))
        self.label.setText(_translate("MainWindow", "Darwin"))
        self.label_2.setText(_translate("MainWindow", "Processor"))

введите сюда описание изображения

→ Ссылка
Автор решения: S. Nick

Хочу задать маленький вопросик: файл q1354387_main_ui.py вы делали с помощью Qt Designer?

а можно как-то .py конвертировать .ui, чтобы посмотреть как там всё устроено и разобраться?

Конвертируем из .ui в .py:

pyuic5 q1354387_main.ui -o q1354387_main_ui.py -x

q1354387_main.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>760</width>
    <height>480</height>
   </rect>
  </property>
  <property name="minimumSize">
   <size>
    <width>760</width>
    <height>480</height>
   </size>
  </property>
  <property name="maximumSize">
   <size>
    <width>760</width>
    <height>480</height>
   </size>
  </property>
  <property name="windowTitle">
   <string>System Monitor</string>
  </property>
  <property name="styleSheet">
   <string notr="true">background-color: rgb(77, 77, 127);</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QFrame" name="circularProgressBar_Main">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>60</y>
      <width>240</width>
      <height>240</height>
     </rect>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: none;</string>
    </property>
    <property name="frameShape">
     <enum>QFrame::NoFrame</enum>
    </property>
    <property name="frameShadow">
     <enum>QFrame::Raised</enum>
    </property>
    <widget class="QFrame" name="circularProgressCPU">
     <property name="geometry">
      <rect>
       <x>10</x>
       <y>10</y>
       <width>220</width>
       <height>220</height>
      </rect>
     </property>
     <property name="styleSheet">
      <string notr="true">QFrame{
    border-radius: 110px;   
    background-color: qconicalgradient(cx:0.5, cy:0.5, angle:90, stop:0.400 rgba(85, 170, 255, 255), stop:0.395 rgba(255, 255, 255, 0));
}</string>
     </property>
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Raised</enum>
     </property>
    </widget>
    <widget class="QFrame" name="circularBg">
     <property name="geometry">
      <rect>
       <x>10</x>
       <y>10</y>
       <width>220</width>
       <height>220</height>
      </rect>
     </property>
     <property name="styleSheet">
      <string notr="true">QFrame{
    border-radius: 110px;   
    background-color: rgba(85, 85, 127, 100);
}</string>
     </property>
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Raised</enum>
     </property>
    </widget>
    <widget class="QFrame" name="circularContainer">
     <property name="geometry">
      <rect>
       <x>25</x>
       <y>25</y>
       <width>190</width>
       <height>190</height>
      </rect>
     </property>
     <property name="baseSize">
      <size>
       <width>0</width>
       <height>0</height>
      </size>
     </property>
     <property name="styleSheet">
      <string notr="true">QFrame{
    border-radius: 95px;    
    background-color: rgb(58, 58, 102);
}</string>
     </property>
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Raised</enum>
     </property>
     <widget class="QWidget" name="layoutWidget">
      <property name="geometry">
       <rect>
        <x>10</x>
        <y>40</y>
        <width>171</width>
        <height>125</height>
       </rect>
      </property>
      <layout class="QGridLayout" name="infoLayout">
       <item row="0" column="0">
        <widget class="QLabel" name="labelAplicationName">
         <property name="font">
          <font>
           <family>Helvetica Neue</family>
           <pointsize>10</pointsize>
          </font>
         </property>
         <property name="styleSheet">
          <string notr="true">color: #FFFFFF; background-color: none;</string>
         </property>
         <property name="text">
          <string>&lt;strong&gt;CPU&lt;/strong&gt; USAGE</string>
         </property>
         <property name="alignment">
          <set>Qt::AlignCenter</set>
         </property>
        </widget>
       </item>
       <item row="1" column="0">
        <widget class="QLabel" name="labelPercentageCPU">
         <property name="font">
          <font>
           <family>Helvetica Neue</family>
           <pointsize>30</pointsize>
          </font>
         </property>
         <property name="styleSheet">
          <string notr="true">color: rgb(115, 185, 255); padding: 0px; background-color: none;</string>
         </property>
         <property name="text">
          <string>&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:50pt;&quot;&gt;60&lt;/span&gt;&lt;span style=&quot; font-size:40pt; vertical-align:super;&quot;&gt;%&lt;/span&gt;&lt;/p&gt;</string>
         </property>
         <property name="alignment">
          <set>Qt::AlignCenter</set>
         </property>
         <property name="indent">
          <number>-1</number>
         </property>
        </widget>
       </item>
       <item row="2" column="0">
        <widget class="QLabel" name="labelCredits">
         <property name="font">
          <font>
           <family>Helvetica Neue</family>
           <pointsize>8</pointsize>
          </font>
         </property>
         <property name="styleSheet">
          <string notr="true">color: rgb(148, 148, 216); background-color: none;</string>
         </property>
         <property name="text">
          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
         </property>
         <property name="alignment">
          <set>Qt::AlignCenter</set>
         </property>
        </widget>
       </item>
      </layout>
     </widget>
    </widget>
    <zorder>circularBg</zorder>
    <zorder>circularProgressCPU</zorder>
    <zorder>circularContainer</zorder>
   </widget>
   <widget class="QFrame" name="circularProgressBar_Main_3">
    <property name="geometry">
     <rect>
      <x>500</x>
      <y>60</y>
      <width>240</width>
      <height>240</height>
     </rect>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: none;</string>
    </property>
    <property name="frameShape">
     <enum>QFrame::NoFrame</enum>
    </property>
    <property name="frameShadow">
     <enum>QFrame::Raised</enum>
    </property>
    <widget class="QFrame" name="circularProgressRAM">
     <property name="geometry">
      <rect>
       <x>10</x>
       <y>10</y>
       <width>220</width>
       <height>220</height>
      </rect>
     </property>
     <property name="styleSheet">
      <string notr="true">QFrame{
    border-radius: 110px;   
    background-color: qconicalgradient(cx:0.5, cy:0.5, angle:90, stop:0.750 rgba(255, 0, 127, 255), stop:0.745 rgba(255, 255, 255, 0));
}</string>
     </property>
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Raised</enum>
     </property>
    </widget>
    <widget class="QFrame" name="circularBg_3">
     <property name="geometry">
      <rect>
       <x>10</x>
       <y>10</y>
       <width>220</width>
       <height>220</height>
      </rect>
     </property>
     <property name="styleSheet">
      <string notr="true">QFrame{
    border-radius: 110px;   
    background-color: rgba(85, 85, 127, 100);
}</string>
     </property>
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Raised</enum>
     </property>
    </widget>
    <widget class="QFrame" name="circularContainer_3">
     <property name="geometry">
      <rect>
       <x>25</x>
       <y>25</y>
       <width>190</width>
       <height>190</height>
      </rect>
     </property>
     <property name="baseSize">
      <size>
       <width>0</width>
       <height>0</height>
      </size>
     </property>
     <property name="styleSheet">
      <string notr="true">QFrame{
    border-radius: 95px;    
    background-color: rgb(58, 58, 102);
}</string>
     </property>
     <property name="frameShape">
      <enum>QFrame::StyledPanel</enum>
     </property>
     <property name="frameShadow">
      <enum>QFrame::Raised</enum>
     </property>
     <widget class="QWidget" name="layoutWidget_3">
      <property name="geometry">
       <rect>
        <x>10</x>
        <y>40</y>
        <width>171</width>
        <height>125</height>
       </rect>
      </property>
      <layout class="QGridLayout" name="infoLayout_3">
       <item row="0" column="0">
        <widget class="QLabel" name="labelAplicationName_3">
         <property name="font">
          <font>
           <family>Helvetica Neue</family>
           <pointsize>10</pointsize>
          </font>
         </property>
         <property name="styleSheet">
          <string notr="true">color: #FFFFFF; background-color: none;</string>
         </property>
         <property name="text">
          <string>&lt;strong&gt;RAM&lt;/strong&gt; USAGE</string>
         </property>
         <property name="alignment">
          <set>Qt::AlignCenter</set>
         </property>
        </widget>
       </item>
       <item row="1" column="0">
        <widget class="QLabel" name="labelPercentageRAM">
         <property name="font">
          <font>
           <family>Helvetica Neue</family>
           <pointsize>30</pointsize>
          </font>
         </property>
         <property name="styleSheet">
          <string notr="true">color: rgb(255, 44, 174); padding: 0px; background-color: none;</string>
         </property>
         <property name="text">
          <string>&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:50pt;&quot;&gt;25&lt;/span&gt;&lt;span style=&quot; font-size:40pt; vertical-align:super;&quot;&gt;%&lt;/span&gt;&lt;/p&gt;</string>
         </property>
         <property name="alignment">
          <set>Qt::AlignCenter</set>
         </property>
         <property name="indent">
          <number>-1</number>
         </property>
        </widget>
       </item>
       <item row="2" column="0">
        <widget class="QLabel" name="labelCredits_3">
         <property name="font">
          <font>
           <family>Helvetica Neue</family>
           <pointsize>8</pointsize>
          </font>
         </property>
         <property name="styleSheet">
          <string notr="true">color: rgb(148, 148, 216); background-color: none;</string>
         </property>
         <property name="text">
          <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
         </property>
         <property name="alignment">
          <set>Qt::AlignCenter</set>
         </property>
        </widget>
       </item>
      </layout>
     </widget>
    </widget>
    <zorder>circularBg_3</zorder>
    <zorder>circularProgressRAM</zorder>
    <zorder>circularContainer_3</zorder>
   </widget>
   <widget class="QLabel" name="label_title">
    <property name="geometry">
     <rect>
      <x>60</x>
      <y>10</y>
      <width>641</width>
      <height>50</height>
     </rect>
    </property>
    <property name="styleSheet">
     <string notr="true">color: rgb(115, 185, 255); background-color: none; font-size: 22px;</string>
    </property>
    <property name="text">
     <string>System Monitor</string>
    </property>
    <property name="alignment">
     <set>Qt::AlignCenter</set>
    </property>
   </widget>
   <widget class="QWidget" name="gridLayoutWidget">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>320</y>
      <width>721</width>
      <height>151</height>
     </rect>
    </property>
    <layout class="QGridLayout" name="gridLayout"/>
   </widget>
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>330</x>
      <y>160</y>
      <width>113</width>
      <height>32</height>
     </rect>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgba(85, 170, 255, 255);
color: white;</string>
    </property>
    <property name="text">
     <string>Show CPU Graph</string>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton_2">
    <property name="geometry">
     <rect>
      <x>330</x>
      <y>200</y>
      <width>113</width>
      <height>32</height>
     </rect>
    </property>
    <property name="styleSheet">
     <string notr="true">background-color: rgb(255, 44, 174);
color: white;</string>
    </property>
    <property name="text">
     <string>Show RAM Graph</string>
    </property>
   </widget>
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>210</x>
      <y>60</y>
      <width>341</width>
      <height>16</height>
     </rect>
    </property>
    <property name="styleSheet">
     <string notr="true">color: rgb(115, 185, 255); font-size: 12px; padding-left: 2px; padding-right: 2px; border: none;</string>
    </property>
    <property name="text">
     <string>Darwin</string>
    </property>
    <property name="alignment">
     <set>Qt::AlignCenter</set>
    </property>
   </widget>
   <widget class="QLabel" name="label_2">
    <property name="geometry">
     <rect>
      <x>260</x>
      <y>90</y>
      <width>241</width>
      <height>16</height>
     </rect>
    </property>
    <property name="styleSheet">
     <string notr="true">color: rgb(115, 185, 255); font-size: 12px; padding-left: 2px; padding-right: 2px; border: none;</string>
    </property>
    <property name="text">
     <string>Processor</string>
    </property>
    <property name="alignment">
     <set>Qt::AlignCenter</set>
    </property>
   </widget>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>
→ Ссылка