PCM_Report/demo_config_category_ui.py

141 lines
4.3 KiB
Python

"""
配置分类UI组件演示程序
"""
import sys
from pathlib import Path
from PySide6.QtWidgets import (
QApplication, QMainWindow, QWidget, QVBoxLayout,
QTextEdit, QLabel, QPushButton, QMessageBox
)
from PySide6.QtCore import Qt
from config_category_widget import ConfigCategoryWidget
class DemoWindow(QMainWindow):
"""演示窗口"""
def __init__(self):
super().__init__()
self.setWindowTitle("配置分类功能演示")
self.resize(800, 600)
# 中心部件
central = QWidget()
layout = QVBoxLayout()
# 标题
title = QLabel("配置分类功能演示")
title.setStyleSheet("font-size: 18px; font-weight: bold; padding: 10px;")
title.setAlignment(Qt.AlignCenter)
layout.addWidget(title)
# 配置分类选择器
self.category_widget = ConfigCategoryWidget()
self.category_widget.category_changed.connect(self._on_category_changed)
layout.addWidget(self.category_widget)
# 信息显示区域
info_label = QLabel("当前分类信息:")
info_label.setStyleSheet("font-weight: bold; margin-top: 20px;")
layout.addWidget(info_label)
self.info_text = QTextEdit()
self.info_text.setReadOnly(True)
self.info_text.setMaximumHeight(200)
layout.addWidget(self.info_text)
# 配置内容显示区域
config_label = QLabel("配置文件内容:")
config_label.setStyleSheet("font-weight: bold; margin-top: 20px;")
layout.addWidget(config_label)
self.config_text = QTextEdit()
self.config_text.setReadOnly(True)
layout.addWidget(self.config_text)
# 操作按钮
btn_layout = QVBoxLayout()
refresh_btn = QPushButton("刷新分类列表")
refresh_btn.clicked.connect(self._refresh_categories)
btn_layout.addWidget(refresh_btn)
load_btn = QPushButton("加载当前分类配置")
load_btn.clicked.connect(self._load_current_config)
btn_layout.addWidget(load_btn)
layout.addLayout(btn_layout)
central.setLayout(layout)
self.setCentralWidget(central)
# 初始加载
self._load_current_config()
def _on_category_changed(self, category_name: str, config_path: Path, template_path):
"""分类改变时的处理"""
info = f"分类名称: {category_name}\n"
info += f"配置路径: {config_path}\n"
info += f"配置存在: {'' if config_path.exists() else ''}\n"
if template_path:
info += f"模板路径: {template_path}\n"
info += f"模板存在: {'' if template_path.exists() else ''}\n"
else:
info += "模板路径: (未配置)\n"
self.info_text.setText(info)
# 自动加载配置内容
self._load_config_content(config_path)
def _load_config_content(self, config_path: Path):
"""加载配置文件内容"""
try:
if not config_path.exists():
self.config_text.setText("配置文件不存在")
return
with config_path.open('r', encoding='utf-8') as f:
content = f.read()
self.config_text.setText(content)
except Exception as e:
self.config_text.setText(f"读取配置文件失败: {e}")
def _refresh_categories(self):
"""刷新分类列表"""
self.category_widget._load_categories()
QMessageBox.information(self, "刷新", "分类列表已刷新")
def _load_current_config(self):
"""加载当前分类配置"""
category = self.category_widget.get_current_category()
if category is None:
self.info_text.setText("未选择分类")
self.config_text.setText("")
return
self._on_category_changed(
category.name,
category.config_path,
category.template_path
)
def main():
"""主函数"""
app = QApplication(sys.argv)
# 设置样式
app.setStyle("Fusion")
window = DemoWindow()
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()