pyqt6Dashboard/qtDash/monitor_card.py

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)