import sys import os import json # Fix QtWebEngine initialization by importing it before QApplication is created import os os.environ["QTWEBENGINE_CHROMIUM_FLAGS"] = "--no-sandbox --disable-gpu --disable-gpu-compositing --disable-dev-shm-usage" from PyQt6.QtWebEngineWidgets import QWebEngineView from PyQt6.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QStackedWidget) from PyQt6.QtCore import Qt, QSize from PyQt6.QtGui import QIcon, QFont from pages.status_page import StatusPage from pages.control_page import ControlPage from utils.aio_print_api import AIOPrrintSystemAPI def load_config(): config_path = os.path.join(os.path.dirname(__file__), "config.json") try: with open(config_path, "r", encoding="utf-8") as f: return json.load(f) except Exception as e: print(f"Failed to load config: {e}") return {} class MainWindow(QWidget): def __init__(self): super().__init__() # 初始化 API 客户端 config = load_config() self.api_client = AIOPrrintSystemAPI( api_url=config.get("api_url", "http://127.0.0.1:5001/api/v1"), api_key=config.get("api_key", "") ) self.init_ui() def init_ui(self): # 整体布局 main_layout = QVBoxLayout(self) main_layout.setContentsMargins(0, 0, 0, 0) main_layout.setSpacing(0) # 顶部主显示区 (使用 QStackedWidget 切换不同页面) self.stacked_widget = QStackedWidget() self.stacked_widget.setStyleSheet("background-color: #555555;") # 深灰色主显示区 # 添加测试页面 self.page_status = StatusPage(self.api_client) self.page_control = ControlPage(self.api_client) self.page_settings = QLabel("系统设置") self.stacked_widget.addWidget(self.page_status) self.stacked_widget.addWidget(self.page_control) for page in [self.page_settings]: page.setAlignment(Qt.AlignmentFlag.AlignCenter) page.setStyleSheet("color: white; font-size: 48px; font-weight: bold;") self.stacked_widget.addWidget(page) # 底部按钮区 bottom_layout = QHBoxLayout() bottom_layout.setContentsMargins(10, 10, 10, 10) bottom_layout.setSpacing(20) # 定义底部区域背景 bottom_widget = QWidget() bottom_widget.setStyleSheet("background-color: #333333;") bottom_widget.setLayout(bottom_layout) bottom_widget.setFixedHeight(120) # 为触摸优化的按钮高度 # 创建触摸友好的按钮 self.btn_status = self.create_nav_button("状态", self.switchToStatus) self.btn_control = self.create_nav_button("控制", self.switchToControl) self.btn_settings = self.create_nav_button("设置", self.switchToSettings) bottom_layout.addWidget(self.btn_status) bottom_layout.addWidget(self.btn_control) bottom_layout.addWidget(self.btn_settings) # 将主显示区和底部按钮区加入整体布局 main_layout.addWidget(self.stacked_widget) main_layout.addWidget(bottom_widget) self.setLayout(main_layout) self.setStyleSheet("background-color: #666666;") # 整体灰色背景 def create_nav_button(self, text, callback): # 如果有图标,可以使用 btn.setIcon(QIcon("path/to/icon.png")) btn = QPushButton(text) # 为触摸屏优化:大字体,增加内边距 btn.setStyleSheet(""" QPushButton { background-color: #444444; color: white; border: 2px solid #555555; border-radius: 10px; font-size: 32px; padding: 10px; } QPushButton:pressed { background-color: #222222; border: 2px solid #4CAF50; } """) btn.setSizePolicy(btn.sizePolicy().Policy.Expanding, btn.sizePolicy().Policy.Expanding) btn.clicked.connect(callback) return btn def switchToStatus(self): self.stacked_widget.setCurrentIndex(0) def switchToControl(self): self.stacked_widget.setCurrentIndex(1) def switchToSettings(self): self.stacked_widget.setCurrentIndex(2) def main(): app = QApplication(sys.argv) # 隐藏鼠标光标,针对触摸屏优化 app.setOverrideCursor(Qt.CursorShape.BlankCursor) window = MainWindow() # 全屏无边框显示 window.showFullScreen() sys.exit(app.exec()) if __name__ == "__main__": main()