这是使用PyQT5作为UI的首次提交,将后端和UI合并到1个工程中,统一使用了Python,没有使用JS和HTML
This commit is contained in:
209
UI/views/main_window.py
Normal file
209
UI/views/main_window.py
Normal file
@@ -0,0 +1,209 @@
|
||||
#!/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]}")
|
||||
Reference in New Issue
Block a user