pyqt6Dashboard/qtDash/main.py

66 lines
1.8 KiB
Python

# main.py
from PyQt6.QtWidgets import QApplication, QWidget, QGridLayout, QVBoxLayout
from PyQt6.QtCore import QTimer
import sys
from loading_overlay import LoadingOverlay
from monitor_data import get_monitor_data
from monitor_card import MonitorCard # 카드 UI는 따로 분리해도 좋음
class Dashboard(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Server Monitor Dashboard")
self.setFixedSize(960, 640)
self.cards = {}
self.titles = [
"CPU", "RAM", "Disk", "Uptime",
"CPU Temp", "GPU Temp", "GPU Usage", "Swap",
"Download", "Upload", "Alive", "Processes"
]
# 메인 레이아웃
self.layout = QVBoxLayout(self)
self.setLayout(self.layout)
# 카드 그리드
self.grid = QGridLayout()
self.grid.setSpacing(10)
self.layout.addLayout(self.grid)
# 카드 생성
for i, title in enumerate(self.titles):
row = i // 4
col = i % 4
card = MonitorCard(title)
self.grid.addWidget(card, row, col)
self.cards[title] = card
# 오버레이 생성
self.overlay = LoadingOverlay(self)
self.overlay.start()
# 데이터 수신 후
QTimer.singleShot(2000, self.finish_loading)
# 주기적 업데이트
self.timer = QTimer()
self.timer.timeout.connect(self.update_data)
self.timer.start(3000)
def finish_loading(self):
self.overlay.stop()
self.update_data()
def update_data(self):
data = get_monitor_data()
for key in self.titles:
self.cards[key].update_value(data.get(key, "--"))
if __name__ == "__main__":
app = QApplication(sys.argv)
dashboard = Dashboard()
dashboard.show()
sys.exit(app.exec())