52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
# monitor_card.py
|
|
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QLabel
|
|
from PyQt6.QtCore import Qt
|
|
from PyQt6.QtGui import QMovie
|
|
|
|
class MonitorCard(QWidget):
|
|
def __init__(self, title, bg_color="#2e2e2e"):
|
|
super().__init__()
|
|
self.setStyleSheet(f"""
|
|
background-color: {bg_color};
|
|
border: 1px solid #444;
|
|
border-radius: 4px;
|
|
""")
|
|
|
|
layout = QVBoxLayout()
|
|
layout.setContentsMargins(0, 0, 0, 0)
|
|
layout.setSpacing(0)
|
|
|
|
self.title = QLabel(title)
|
|
self.title.setStyleSheet("font-weight: bold; font-size: 30px; color: white;")
|
|
self.title.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
|
|
self.value = QLabel("--")
|
|
self.value.setStyleSheet("font-size: 45px; font-weight: bold; color: white;")
|
|
self.value.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
|
|
self.spinner = QLabel()
|
|
self.spinner.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
self.movie = QMovie("spinner.gif")
|
|
self.spinner.setMovie(self.movie)
|
|
self.spinner.hide()
|
|
|
|
layout.addWidget(self.title)
|
|
layout.addWidget(self.value)
|
|
layout.addWidget(self.spinner)
|
|
self.setLayout(layout)
|
|
|
|
def start_loading(self):
|
|
self.value.hide()
|
|
self.spinner.show()
|
|
self.movie.start()
|
|
|
|
def stop_loading(self):
|
|
self.movie.stop()
|
|
self.spinner.hide()
|
|
self.value.show()
|
|
|
|
def update_value(self, text):
|
|
self.stop_loading()
|
|
self.value.setText(text)
|
|
|