新建仓库

This commit is contained in:
Voge1imkafig 2025-08-04 18:08:53 +08:00
commit c28642bdec
9 changed files with 1427 additions and 0 deletions

7
README.md Normal file
View File

@ -0,0 +1,7 @@
# 包含一整套流程的报告生成工具,包括:
- 数据获取:文件获取数据
- 数据预处理:阴暗处亮度增加,细节增强。
- 数据报告生成:基于模板批量生成报告。
![项目架构](工具流程.png)

View File

@ -0,0 +1,14 @@
{
"项目名称": "123",
"风场名": "123",
"风场地址": "123",
"甲方公司": "123",
"甲方负责人": "123",
"甲方负责人电话": "123",
"乙方公司": "武汉迪特聚能科技有限公司",
"乙方负责人": "123",
"乙方负责人电话": "123",
"项目规格": "123",
"项目工期": "123",
"json路径": "/home/dtyx/桌面/yhh/ReportGenerator/config/项目基本信息"
}

View File

@ -0,0 +1,14 @@
{
"项目名称": "123",
"风场名": "123",
"风场地址": "213",
"甲方公司": "123",
"甲方负责人": "123",
"甲方负责人电话": "123",
"乙方公司": "武汉迪特聚能科技有限公司",
"乙方负责人": "123",
"乙方负责人电话": "123",
"项目规格": "213",
"项目工期": "123",
"json路径": "/home/dtyx/桌面/yhh/ReportGenerator/config/项目基本信息"
}

1085
info_core/MyQtClass.py Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

198
info_core/defines.py Normal file
View File

@ -0,0 +1,198 @@
from PySide6.QtGui import QFont
# ====================== 样式宏定义 ======================
# 字体设置
FONT_PATH = "font/SourceHanSerifCN-Medium.ttf" # 指定字体文件路径
FONT_FAMILY = "Source Han Serif CN" # 字体家族名称
TITLE_FONT_SIZE = 12
CONTENT_FONT_SIZE = 11
BUTTON_FONT_SIZE = 11
# 颜色定义
PRIMARY_COLOR = "#2c3e50"
SECONDARY_COLOR = "#34495e"
ACCENT_COLOR = "#3498db"
SUCCESS_COLOR = "#2ecc71"
LIGHT_COLOR = "#ecf0f1"
DARK_COLOR = "#2c3e50"
TEXT_COLOR = "#2c3e50"
LIGHT_TEXT_COLOR = "#ecf0f1"
# 按钮样式
BUTTON_WIDTH = 100
BUTTON_HEIGHT = 34
BUTTON_RADIUS = 4
BUTTON_FONT_WEIGHT = QFont.Weight.Medium
BUTTON_STYLE = f"""
QPushButton {{
font-family: "{FONT_FAMILY}";
font-size: {BUTTON_FONT_SIZE}pt;
font-weight: {BUTTON_FONT_WEIGHT};
color: {TEXT_COLOR};
background-color: {LIGHT_COLOR};
border: 1px solid {SECONDARY_COLOR};
border-radius: {BUTTON_RADIUS}px;
padding: 6px 12px;
min-width: {BUTTON_WIDTH}px;
min-height: {BUTTON_HEIGHT}px;
}}
QPushButton:hover {{
background-color: #dfe6ec;
}}
QPushButton:pressed {{
background-color: #d0d7dd;
}}
"""
PRIMARY_BUTTON_STYLE = f"""
QPushButton {{
font-family: "{FONT_FAMILY}";
font-size: {BUTTON_FONT_SIZE + 1}pt;
font-weight: {BUTTON_FONT_WEIGHT};
color: {LIGHT_TEXT_COLOR};
background-color: {PRIMARY_COLOR};
border: 1px solid {DARK_COLOR};
border-radius: {BUTTON_RADIUS}px;
padding: 8px 16px;
}}
QPushButton:hover {{
background-color: #34495e;
}}
QPushButton:pressed {{
background-color: #2c3e50;
}}
"""
# 下拉框样式
COMBO_BOX_HEIGHT = 34
COMBO_BOX_STYLE = f"""
QComboBox {{
font-family: "{FONT_FAMILY}";
font-size: {CONTENT_FONT_SIZE}pt;
min-height: {COMBO_BOX_HEIGHT}px;
padding: 5px 10px;
border: 1px solid #bdc3c7;
border-radius: 4px;
}}
QComboBox::drop-down {{
width: 30px;
border-left: 1px solid #bdc3c7;
}}
"""
# 组框样式
GROUP_BOX_MIN_WIDTH = 380
GROUP_BOX_MIN_HEIGHT = 200
GROUP_BOX_SPACING = 15
GROUP_BOX_MARGINS = (15, 15, 15, 15)
GROUP_BOX_STYLE = f"""
QGroupBox {{
font-family: "{FONT_FAMILY}";
font-size: {TITLE_FONT_SIZE}pt;
font-weight: bold;
color: {PRIMARY_COLOR};
border: 1px solid #bdc3c7;
border-radius: 5px;
margin-top: 10px;
}}
QGroupBox::title {{
subcontrol-origin: margin;
left: 10px;
padding: 0 3px;
}}
"""
# 标签样式
LABEL_STYLE = f"""
QLabel {{
font-family: "{FONT_FAMILY}";
font-size: {CONTENT_FONT_SIZE}pt;
color: {TEXT_COLOR};
}}
"""
PATH_DISPLAY_STYLE = f"""
QLabel {{
font-family: "{FONT_FAMILY}";
font-size: {CONTENT_FONT_SIZE}pt;
background-color: {LIGHT_COLOR};
border: 1px solid #dee2e6;
border-radius: 4px;
padding: 10px;
min-height: 80px;
color: {TEXT_COLOR};
}}
"""
# 主窗口样式
WINDOW_MIN_WIDTH = 1000
WINDOW_MIN_HEIGHT = 720
MAIN_LAYOUT_SPACING = 20
MAIN_LAYOUT_MARGINS = (25, 25, 25, 25)
# 信息标签样式 (左侧固定标签)
INFO_LABEL_STYLE = f"""
QLabel {{
{LABEL_STYLE}
min-height: {COMBO_BOX_HEIGHT}px;
padding: 5px;
min-width: 100px;
}}
"""
# 信息显示样式 (右侧内容)
INFO_DISPLAY_STYLE = f"""
QLabel {{
{PATH_DISPLAY_STYLE}
min-height: {COMBO_BOX_HEIGHT}px;
border-radius: 4px;
}}
"""
# 分隔线样式
SEPARATOR_STYLE = """
QFrame {
border: 1px solid #dee2e6;
margin: 10px 0;
}
"""
# 等待提示样式
WAITING_LABEL_STYLE = f"""
QLabel {{
{LABEL_STYLE}
font-size: {TITLE_FONT_SIZE}pt;
qproperty-alignment: AlignCenter;
}}
"""
CHECKBOX_SIZE = 16 # 复选框大小
CHECKBOX_MARGIN = 4 # 边距
# 基础CheckBox样式
CHECKBOX_STYLE = f"""
QCheckBox {{
font-family: "{FONT_FAMILY}";
font-size: {CONTENT_FONT_SIZE}pt;
color: {TEXT_COLOR};
spacing: 8px;
padding: {CHECKBOX_MARGIN}px;
}}
QCheckBox::indicator {{
width: {CHECKBOX_SIZE}px;
height: {CHECKBOX_SIZE}px;
}}
"""
# 主色调CheckBox
PRIMARY_CHECKBOX_STYLE = f"""
{CHECKBOX_STYLE}
QCheckBox::indicator {{
border: 1px solid {PRIMARY_COLOR};
border-radius: 3px;
}}
QCheckBox::indicator:checked {{
background-color: {PRIMARY_COLOR};
image: url(:/icons/check_white.svg);
}}
"""

109
main.py Normal file
View File

@ -0,0 +1,109 @@
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()

BIN
工具流程.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB