# 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())