新建仓库
This commit is contained in:
commit
c28642bdec
|
@ -0,0 +1,7 @@
|
|||
# 包含一整套流程的报告生成工具,包括:
|
||||
- 数据获取:文件获取数据
|
||||
- 数据预处理:阴暗处亮度增加,细节增强。
|
||||
- 数据报告生成:基于模板批量生成报告。
|
||||
|
||||
|
||||

|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"项目名称": "123",
|
||||
"风场名": "123",
|
||||
"风场地址": "123",
|
||||
"甲方公司": "123",
|
||||
"甲方负责人": "123",
|
||||
"甲方负责人电话": "123",
|
||||
"乙方公司": "武汉迪特聚能科技有限公司",
|
||||
"乙方负责人": "123",
|
||||
"乙方负责人电话": "123",
|
||||
"项目规格": "123",
|
||||
"项目工期": "123",
|
||||
"json路径": "/home/dtyx/桌面/yhh/ReportGenerator/config/项目基本信息"
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"项目名称": "123",
|
||||
"风场名": "123",
|
||||
"风场地址": "213",
|
||||
"甲方公司": "123",
|
||||
"甲方负责人": "123",
|
||||
"甲方负责人电话": "123",
|
||||
"乙方公司": "武汉迪特聚能科技有限公司",
|
||||
"乙方负责人": "123",
|
||||
"乙方负责人电话": "123",
|
||||
"项目规格": "213",
|
||||
"项目工期": "123",
|
||||
"json路径": "/home/dtyx/桌面/yhh/ReportGenerator/config/项目基本信息"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -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);
|
||||
}}
|
||||
"""
|
|
@ -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()
|
Loading…
Reference in New Issue