209 lines
7.9 KiB
Python
209 lines
7.9 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
|
||
"""
|
||
主窗口类,包含导航和主内容区域
|
||
"""
|
||
|
||
import sys
|
||
import os
|
||
from PyQt5.QtWidgets import (QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
|
||
QPushButton, QStackedWidget, QLabel, QStatusBar, QSizePolicy, QMessageBox, QApplication)
|
||
from PyQt5.QtCore import Qt, pyqtSignal
|
||
from PyQt5.QtGui import QIcon, QCloseEvent
|
||
|
||
from views.test_monitor_view import TestMonitorView
|
||
from views.test_plan_view import TestPlanView
|
||
from views.test_result_view import TestResultView
|
||
from views.system_settings_view import SystemSettingsView
|
||
|
||
class MainWindow(QMainWindow):
|
||
# 定义窗口关闭信号
|
||
window_closed = pyqtSignal()
|
||
|
||
def __init__(self):
|
||
print("开始初始化主窗口...")
|
||
super().__init__()
|
||
print("设置窗口标题和尺寸...")
|
||
self.setWindowTitle("DTM试验管理系统")
|
||
|
||
# 设置初始窗口大小(屏幕的90%)
|
||
from PyQt5.QtWidgets import QDesktopWidget
|
||
screen = QDesktopWidget().screenGeometry()
|
||
self.resize(int(screen.width() * 0.9), int(screen.height() * 0.9))
|
||
# 窗口居中
|
||
self.move((screen.width() - self.width()) // 2, (screen.height() - self.height()) // 2)
|
||
|
||
# 创建中心部件
|
||
print("创建中心部件...")
|
||
self.central_widget = QWidget()
|
||
self.setCentralWidget(self.central_widget)
|
||
|
||
# 创建主布局
|
||
print("创建主布局...")
|
||
self.main_layout = QVBoxLayout(self.central_widget)
|
||
self.main_layout.setContentsMargins(0, 0, 0, 0)
|
||
self.main_layout.setSpacing(0)
|
||
|
||
# 创建导航栏
|
||
print("创建导航栏...")
|
||
self.create_navigation_bar()
|
||
|
||
# 创建主内容区域
|
||
print("创建主内容区域...")
|
||
self.create_main_content()
|
||
|
||
# 创建状态栏
|
||
print("创建状态栏...")
|
||
self.create_status_bar()
|
||
|
||
# 应用样式表
|
||
print("应用样式表...")
|
||
self.apply_styles()
|
||
|
||
# 默认显示第一个视图
|
||
print("切换到默认视图...")
|
||
self.switch_to_view(0)
|
||
|
||
# 窗口初始化完成后设置为最大化显示
|
||
self.showMaximized()
|
||
print("主窗口初始化完成")
|
||
|
||
def create_navigation_bar(self):
|
||
"""创建导航栏"""
|
||
print("创建导航栏部件...")
|
||
self.nav_bar = QWidget()
|
||
self.nav_bar.setObjectName("nav-bar")
|
||
nav_layout = QHBoxLayout(self.nav_bar)
|
||
nav_layout.setContentsMargins(10, 10, 10, 10)
|
||
nav_layout.setSpacing(20)
|
||
|
||
# 应用标题
|
||
title_label = QLabel("跌落系统管理")
|
||
title_label.setObjectName("title")
|
||
title_label.setAlignment(Qt.AlignCenter)
|
||
title_label.setStyleSheet("font-size: 24px; font-weight: bold;")
|
||
nav_layout.addWidget(title_label)
|
||
|
||
# 添加弹性空间
|
||
nav_layout.addStretch()
|
||
|
||
# 右侧功能按钮
|
||
self.nav_buttons = []
|
||
|
||
# 试验监测按钮
|
||
btn_monitor = QPushButton("🖥 试验监测")
|
||
btn_monitor.setObjectName("nav-button")
|
||
btn_monitor.setCheckable(True)
|
||
btn_monitor.clicked.connect(lambda: self.switch_to_view(0))
|
||
nav_layout.addWidget(btn_monitor)
|
||
self.nav_buttons.append(btn_monitor)
|
||
|
||
# 试验计划按钮
|
||
btn_plan = QPushButton("📋 试验计划")
|
||
btn_plan.setObjectName("nav-button")
|
||
btn_plan.setCheckable(True)
|
||
btn_plan.clicked.connect(lambda: self.switch_to_view(1))
|
||
nav_layout.addWidget(btn_plan)
|
||
self.nav_buttons.append(btn_plan)
|
||
|
||
# 测试结果按钮
|
||
btn_result = QPushButton("📊 测试结果")
|
||
btn_result.setObjectName("nav-button")
|
||
btn_result.setCheckable(True)
|
||
btn_result.clicked.connect(lambda: self.switch_to_view(2))
|
||
nav_layout.addWidget(btn_result)
|
||
self.nav_buttons.append(btn_result)
|
||
|
||
# 系统设置按钮(齿轮图标)
|
||
btn_settings = QPushButton("⚙ 系统设置")
|
||
btn_settings.setObjectName("nav-button")
|
||
btn_settings.setCheckable(True)
|
||
btn_settings.clicked.connect(lambda: self.switch_to_view(3))
|
||
nav_layout.addWidget(btn_settings)
|
||
self.nav_buttons.append(btn_settings)
|
||
|
||
# 添加关闭按钮 (取消关闭按钮,复用主窗口的关闭按钮)
|
||
# close_button = QPushButton("×")
|
||
# close_button.setObjectName("close-button")
|
||
# close_button.clicked.connect(self.close_application)
|
||
# nav_layout.addWidget(close_button)
|
||
|
||
self.main_layout.addWidget(self.nav_bar)
|
||
print("导航栏创建完成")
|
||
|
||
def create_main_content(self):
|
||
"""创建主内容区域"""
|
||
print("创建主内容区域...")
|
||
self.content_area = QStackedWidget()
|
||
self.main_layout.addWidget(self.content_area)
|
||
|
||
# 创建各个视图
|
||
print("创建试验监控视图...")
|
||
self.test_monitor_view = TestMonitorView() # 默认监控界面
|
||
print("创建试验计划视图...")
|
||
self.test_plan_view = TestPlanView()
|
||
print("创建测试结果视图...")
|
||
self.test_result_view = TestResultView()
|
||
print("创建系统设置视图...")
|
||
self.system_settings_view = SystemSettingsView()
|
||
|
||
# 添加到堆叠窗口
|
||
print("添加视图到堆叠窗口...")
|
||
self.content_area.addWidget(self.test_monitor_view) # 索引0:试验监控(默认)
|
||
self.content_area.addWidget(self.test_plan_view) # 索引1:试验计划
|
||
self.content_area.addWidget(self.test_result_view) # 索引2:测试结果
|
||
self.content_area.addWidget(self.system_settings_view) # 索引3:系统设置
|
||
print("主内容区域创建完成")
|
||
|
||
def create_status_bar(self):
|
||
"""创建状态栏"""
|
||
print("创建状态栏...")
|
||
self.status_bar = QStatusBar()
|
||
self.setStatusBar(self.status_bar)
|
||
self.status_bar.showMessage("就绪")
|
||
print("状态栏创建完成")
|
||
|
||
def apply_styles(self):
|
||
"""应用样式表"""
|
||
try:
|
||
style_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'styles', 'app_style.qss')
|
||
if os.path.exists(style_file):
|
||
with open(style_file, 'r', encoding='utf-8') as f:
|
||
style_sheet = f.read()
|
||
# 全局应用样式,确保按钮等控件样式生效
|
||
QApplication.instance().setStyleSheet(style_sheet)
|
||
print(f"导入全局样式: {style_file}")
|
||
else:
|
||
print(f"样式文件未找到: {style_file}")
|
||
except Exception as e:
|
||
print(f"应用样式时出错: {e}")
|
||
|
||
def close_application(self):
|
||
"""关闭应用程序"""
|
||
reply = QMessageBox.question(self, "确认退出", "确定要关闭系统吗?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
|
||
if reply == QMessageBox.Yes:
|
||
self.close()
|
||
|
||
def closeEvent(self, event: QCloseEvent):
|
||
"""重写窗口关闭事件"""
|
||
print("主窗口关闭事件触发")
|
||
# 发出窗口关闭信号
|
||
self.window_closed.emit()
|
||
# 接受关闭事件
|
||
event.accept()
|
||
print("主窗口关闭完成")
|
||
|
||
def switch_to_view(self, index):
|
||
"""切换视图"""
|
||
# 更新按钮状态
|
||
for i, button in enumerate(self.nav_buttons):
|
||
button.setChecked(i == index)
|
||
|
||
# 切换内容
|
||
self.content_area.setCurrentIndex(index)
|
||
|
||
# 更新状态栏
|
||
view_names = ["试验监控", "试验计划", "测试结果", "系统设置"]
|
||
if index < len(view_names):
|
||
self.status_bar.showMessage(f"当前视图: {view_names[index]}") |