ReportGeneratorLocal/main.py

130 lines
4.8 KiB
Python
Raw Normal View History

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()