126 lines
4.2 KiB
Python
126 lines
4.2 KiB
Python
import sys
|
|
import os
|
|
import json
|
|
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 pages.setting_page import SettingPage
|
|
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 = SettingPage(self.api_client)
|
|
|
|
self.stacked_widget.addWidget(self.page_status)
|
|
self.stacked_widget.addWidget(self.page_control)
|
|
self.stacked_widget.addWidget(self.page_settings)
|
|
|
|
# 底部按钮区
|
|
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()
|