# main.py from PyQt6.QtWidgets import QApplication, QWidget, QGridLayout, QVBoxLayout from PyQt6.QtCore import QTimer from PyQt6.QtGui import QGuiApplication 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 = [ {"id": "cpu", "title": "CPU🔲", "bg_color": "#2e2324"}, {"id": "ram", "title": "RAM🎟", "bg_color": "#2e3e43"}, {"id": "disk", "title": "DISK🖥", "bg_color": "#2e2e2e"}, {"id": "uptime", "title": "UP🕒", "bg_color": "#2e2e2e"}, {"id": "cpu_temp", "title": "CPU🌡️", "bg_color": "#2e2e2e"}, {"id": "gpu_temp", "title": "GPU🌡️", "bg_color": "#2e2e2e"}, {"id": "gpu_usage", "title": "GPU📊", "bg_color": "#2e2e2e"}, {"id": "swap", "title": "SWAP♻️", "bg_color": "#2e2e2e"}, {"id": "download", "title": "DN📥", "bg_color": "#2e2e2e"}, {"id": "upload", "title": "UP📤", "bg_color": "#2e2e2e"}, {"id": "alive", "title": "Alive🔥", "bg_color": "#2e2e2e"}, {"id": "processes", "title": "PS📈", "bg_color": "#2e2e2e"}, ] # 메인 레이아웃 self.layout = QVBoxLayout(self) self.setLayout(self.layout) # 카드 그리드 self.grid = QGridLayout() self.grid.setContentsMargins(0, 0, 0, 0) # (left, top, right, bottom) self.grid.setSpacing(5) self.layout.addLayout(self.grid) # 카드 생성 for i, item in enumerate(self.titles): row = i // 4 col = i % 4 card = MonitorCard(item['title'], bg_color=item['bg_color']) self.grid.addWidget(card, row, col) self.cards[item['id']] = 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 item in self.titles: value = data.get(item['id'], "--") self.cards[item['id']].update_value(value) if __name__ == "__main__": app = QApplication(sys.argv) dashboard = Dashboard() # dashboard.show() # 사용 가능한 모니터 목록 가져오기 screens = QGuiApplication.screens() print("사용 가능한 모니터 수:", len(screens)) # 예: 두 번째 모니터 선택 (인덱스 1) target_screen_index = 1 if len(screens) > 1 else 0 target_screen = screens[target_screen_index] # 선택한 모니터의 geometry로 이동 geometry = target_screen.geometry() dashboard.setGeometry(geometry) # 전체화면으로 표시 dashboard.showFullScreen() sys.exit(app.exec())