ReportGeneratorLocal/main.py

109 lines
4.4 KiB
Python

from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QGridLayout,
QPushButton, QSizePolicy)
from PySide6.QtGui import QFontDatabase
from PySide6.QtCore import Signal
import os
from info_core.defines import *
from info_core.MyQtClass import ConfigComboBoxGroup, FolderImportWidget, ImageAnalysisWidget
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)
self.main_layout.addWidget(self.project_group, 0, 0)
self.main_layout.addWidget(self.staff_group, 0, 1)
# 第二行:导入图片路径、填写机组信息
self.picture_group = FolderImportWidget("导入图片路径")
self.main_layout.addWidget(self.picture_group, 1, 0)
self.image_analysis = ImageAnalysisWidget("填写机组信息")
self.main_layout.addWidget(self.image_analysis, 1, 1)
# 连接信号
self.picture_group.main_folder_selected.connect(self.image_analysis.set_image_folder)
self.image_analysis.generate_path_selected.connect(self.on_generate_path_selected)
# 获取请求信号,调用获取函数,发送更新信号
self.picture_group.get_baogao_choose_info.connect(self.get_baogao_choose_info)
self.send_baogao_choose_info.connect(self.picture_group.update_baogao_choose_info)
# 第三行:生成报告按钮(跨两列)
self.create_generate_button()
self.generate_btn.setEnabled(False)
self.main_layout.addWidget(self.generate_btn, 2, 0, 1, 2)
# 设置列和行的拉伸比例
self.main_layout.setColumnStretch(0, 1) # 第一列拉伸比例
self.main_layout.setColumnStretch(1, 1) # 第二列拉伸比例
self.main_layout.setRowStretch(0, 1) # 第一行拉伸比例为1
self.main_layout.setRowStretch(1, 4) # 第二行拉伸比例为4
self.main_layout.setRowStretch(2, 0) # 第三行不拉伸(固定高度)
def on_generate_path_selected(self, path):
self.generate_btn.setEnabled(True)
def get_baogao_choose_info(self):
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)
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()