2025-08-04 18:08:53 +08:00
|
|
|
|
from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QGridLayout,
|
2025-08-05 17:51:11 +08:00
|
|
|
|
QPushButton, QSizePolicy, QSplitter, QToolBar)
|
2025-08-04 18:08:53 +08:00
|
|
|
|
from PySide6.QtGui import QFontDatabase
|
2025-08-05 17:51:11 +08:00
|
|
|
|
from PySide6.QtCore import Signal, Qt
|
|
|
|
|
|
2025-08-04 18:08:53 +08:00
|
|
|
|
import os
|
|
|
|
|
from info_core.defines import *
|
2025-08-05 17:51:11 +08:00
|
|
|
|
from info_core.MyQtClass import ConfigComboBoxGroup, FolderDropWidget, DraggableLine
|
2025-08-04 18:08:53 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ReportGeneratorUI(QMainWindow):
|
|
|
|
|
send_baogao_choose_info = Signal(list[str])
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
super().__init__()
|
|
|
|
|
# 加载字体
|
|
|
|
|
self.load_font()
|
|
|
|
|
|
|
|
|
|
# 设置窗口属性
|
|
|
|
|
self.setWindowTitle("报告生成器")
|
|
|
|
|
self.setMinimumSize(WINDOW_MIN_WIDTH, WINDOW_MIN_HEIGHT)
|
|
|
|
|
|
|
|
|
|
# 主窗口部件
|
|
|
|
|
self.central_widget = QWidget()
|
|
|
|
|
self.setCentralWidget(self.central_widget)
|
|
|
|
|
|
|
|
|
|
# 主布局
|
|
|
|
|
self.main_layout = QGridLayout(self.central_widget)
|
|
|
|
|
self.main_layout.setSpacing(MAIN_LAYOUT_SPACING)
|
|
|
|
|
self.main_layout.setContentsMargins(*MAIN_LAYOUT_MARGINS)
|
|
|
|
|
|
|
|
|
|
# 初始化UI
|
|
|
|
|
self.init_ui()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def load_font(self):
|
|
|
|
|
"""加载自定义字体"""
|
|
|
|
|
if os.path.exists(FONT_PATH):
|
|
|
|
|
font_id = QFontDatabase.addApplicationFont(FONT_PATH)
|
|
|
|
|
if font_id == -1:
|
|
|
|
|
print("字体加载失败,将使用系统默认字体")
|
|
|
|
|
else:
|
|
|
|
|
print(f"字体文件未找到: {FONT_PATH},将使用系统默认字体")
|
|
|
|
|
|
|
|
|
|
def init_ui(self):
|
|
|
|
|
"""初始化所有UI组件"""
|
|
|
|
|
# 第一行:项目信息和人员配置
|
|
|
|
|
self.project_group = ConfigComboBoxGroup("项目基本信息")
|
|
|
|
|
self.staff_group = ConfigComboBoxGroup("单次检查配置信息", is_project=False)
|
|
|
|
|
# 第二行:导入图片路径、填写机组信息
|
2025-08-05 17:51:11 +08:00
|
|
|
|
self.picture_group = FolderDropWidget()
|
|
|
|
|
# self.image_analysis =
|
|
|
|
|
# self.main_layout.addWidget(self.image_analysis, 1, 1)
|
2025-08-04 18:08:53 +08:00
|
|
|
|
# 第三行:生成报告按钮(跨两列)
|
|
|
|
|
self.create_generate_button()
|
|
|
|
|
self.generate_btn.setEnabled(False)
|
2025-08-05 17:51:11 +08:00
|
|
|
|
|
|
|
|
|
# 创建一个垂直分割器
|
|
|
|
|
self.splitter = QSplitter(Qt.Vertical)
|
|
|
|
|
self.splitter.setStyleSheet(SPLITTER_STYLE)
|
|
|
|
|
# 创建顶部和底部容器
|
|
|
|
|
top_container = QWidget()
|
|
|
|
|
top_container.setLayout(QGridLayout())
|
|
|
|
|
top_container.layout().addWidget(self.project_group, 0, 0)
|
|
|
|
|
top_container.layout().addWidget(self.staff_group, 0, 1)
|
|
|
|
|
|
|
|
|
|
middle_container = QWidget()
|
|
|
|
|
middle_container.setLayout(QGridLayout())
|
|
|
|
|
middle_container.layout().addWidget(self.picture_group, 0, 0)
|
|
|
|
|
|
|
|
|
|
# 添加部件到分割器
|
|
|
|
|
self.splitter.addWidget(top_container)
|
|
|
|
|
self.splitter.addWidget(middle_container)
|
|
|
|
|
|
|
|
|
|
# 设置主布局
|
|
|
|
|
self.main_layout.addWidget(self.splitter, 0, 0, 2, 2) # 占据前两行两列
|
2025-08-04 18:08:53 +08:00
|
|
|
|
self.main_layout.addWidget(self.generate_btn, 2, 0, 1, 2)
|
2025-08-05 17:51:11 +08:00
|
|
|
|
|
|
|
|
|
# 设置分割器初始比例
|
|
|
|
|
self.splitter.setStretchFactor(0, 1)
|
|
|
|
|
self.splitter.setStretchFactor(1, 4)
|
2025-08-04 18:08:53 +08:00
|
|
|
|
|
2025-08-05 17:51:11 +08:00
|
|
|
|
self.toolbar = QToolBar()
|
|
|
|
|
self.addToolBar(self.toolbar)
|
|
|
|
|
self.toolbar.setMovable(False)
|
|
|
|
|
self.toolbar.setFloatable(False)
|
|
|
|
|
new_action = self.toolbar.addAction("重置布局比例")
|
|
|
|
|
self.toolbar.addSeparator()
|
|
|
|
|
new_action.triggered.connect(self.reset_splitter)
|
2025-08-04 18:08:53 +08:00
|
|
|
|
|
2025-08-05 17:51:11 +08:00
|
|
|
|
def reset_splitter(self):
|
|
|
|
|
"""重置分割器的比例"""
|
|
|
|
|
total_size = sum(self.splitter.sizes()) # 获取当前总大小
|
|
|
|
|
self.splitter.setSizes([
|
|
|
|
|
int(total_size * 0.2), # 第一部分占 20%(比例 1:4)
|
|
|
|
|
int(total_size * 0.8) # 第二部分占 80%
|
|
|
|
|
])
|
|
|
|
|
|
2025-08-04 18:08:53 +08:00
|
|
|
|
def on_generate_path_selected(self, path):
|
|
|
|
|
self.generate_btn.setEnabled(True)
|
|
|
|
|
|
2025-08-05 17:51:11 +08:00
|
|
|
|
# search_file_list = []
|
|
|
|
|
# if self.image_analysis.check_is_waibu:
|
|
|
|
|
# search_file_list.append("外汇总")
|
|
|
|
|
# if self.image_analysis.check_is_neibu:
|
|
|
|
|
# search_file_list.append("内汇总")
|
|
|
|
|
# if self.image_analysis.check_is_fanglei:
|
|
|
|
|
# search_file_list.append("防汇总")
|
|
|
|
|
# self.send_baogao_choose_info.emit(search_file_list)
|
2025-08-04 18:08:53 +08:00
|
|
|
|
|
|
|
|
|
def create_button(self, text):
|
|
|
|
|
"""创建统一风格的按钮"""
|
|
|
|
|
btn = QPushButton(text)
|
|
|
|
|
btn.setStyleSheet(BUTTON_STYLE)
|
|
|
|
|
btn.setFixedSize(BUTTON_WIDTH, BUTTON_HEIGHT)
|
|
|
|
|
return btn
|
|
|
|
|
|
|
|
|
|
def create_generate_button(self):
|
|
|
|
|
"""创建生成报告按钮"""
|
|
|
|
|
self.generate_btn = QPushButton("生成报告")
|
|
|
|
|
self.generate_btn.setStyleSheet(PRIMARY_BUTTON_STYLE)
|
|
|
|
|
self.generate_btn.setFixedHeight(50)
|
|
|
|
|
self.generate_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
app = QApplication([])
|
|
|
|
|
window = ReportGeneratorUI()
|
|
|
|
|
window.show()
|
|
|
|
|
app.exec()
|