Compare commits
	
		
			No commits in common. "867903975fd6785cfec4c6ecea20f4854b2ddff5" and "d3ac3238ed2374a99dd554a932f64b5559714dcb" have entirely different histories.
		
	
	
		
			867903975f
			...
			d3ac3238ed
		
	
		
@ -1,201 +0,0 @@
 | 
				
			|||||||
"""
 | 
					 | 
				
			||||||
诊断样式保存失败的具体问题
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
import os
 | 
					 | 
				
			||||||
import traceback
 | 
					 | 
				
			||||||
from style_manager import style_manager, DocumentStyle, FontStyle, ParagraphStyle, HeadingStyle
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def diagnose_save_failure():
 | 
					 | 
				
			||||||
    """诊断样式保存失败的具体问题"""
 | 
					 | 
				
			||||||
    print("=== 诊断样式保存失败问题 ===")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 1. 检查文件权限
 | 
					 | 
				
			||||||
    print("\n1. 检查文件系统权限")
 | 
					 | 
				
			||||||
    styles_dir = style_manager.styles_dir
 | 
					 | 
				
			||||||
    print(f"样式目录: {styles_dir}")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if not os.path.exists(styles_dir):
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            os.makedirs(styles_dir, exist_ok=True)
 | 
					 | 
				
			||||||
            print("✅ 样式目录创建成功")
 | 
					 | 
				
			||||||
        except Exception as e:
 | 
					 | 
				
			||||||
            print(f"❌ 无法创建样式目录: {e}")
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        print("✅ 样式目录已存在")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 检查权限
 | 
					 | 
				
			||||||
    readable = os.access(styles_dir, os.R_OK)
 | 
					 | 
				
			||||||
    writable = os.access(styles_dir, os.W_OK)
 | 
					 | 
				
			||||||
    executable = os.access(styles_dir, os.X_OK)
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    print(f"目录可读: {'✅' if readable else '❌'}")
 | 
					 | 
				
			||||||
    print(f"目录可写: {'✅' if writable else '❌'}")
 | 
					 | 
				
			||||||
    print(f"目录可执行: {'✅' if executable else '❌'}")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if not writable:
 | 
					 | 
				
			||||||
        print("❌ 目录没有写入权限,这是保存失败的主要原因!")
 | 
					 | 
				
			||||||
        print("解决方案:")
 | 
					 | 
				
			||||||
        print("1. 以管理员身份运行程序")
 | 
					 | 
				
			||||||
        print("2. 或者更改程序存储目录到用户可写的位置")
 | 
					 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 测试文件写入
 | 
					 | 
				
			||||||
    test_file = os.path.join(styles_dir, "permission_test.tmp")
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        with open(test_file, 'w', encoding='utf-8') as f:
 | 
					 | 
				
			||||||
            f.write("test")
 | 
					 | 
				
			||||||
        os.remove(test_file)
 | 
					 | 
				
			||||||
        print("✅ 文件写入测试成功")
 | 
					 | 
				
			||||||
    except Exception as e:
 | 
					 | 
				
			||||||
        print(f"❌ 文件写入测试失败: {e}")
 | 
					 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 2. 检查内置样式覆盖问题
 | 
					 | 
				
			||||||
    print("\n2. 检查内置样式覆盖问题")
 | 
					 | 
				
			||||||
    builtin_names = list(style_manager.builtin_styles.keys())
 | 
					 | 
				
			||||||
    print(f"内置样式列表: {builtin_names}")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    def test_save_with_builtin_name():
 | 
					 | 
				
			||||||
        """测试使用内置样式名称保存"""
 | 
					 | 
				
			||||||
        test_style = DocumentStyle(
 | 
					 | 
				
			||||||
            name="爆款文章风格",  # 这是内置样式名
 | 
					 | 
				
			||||||
            description="测试覆盖内置样式",
 | 
					 | 
				
			||||||
            body_font=FontStyle(name="微软雅黑", size=14),
 | 
					 | 
				
			||||||
            body_paragraph=ParagraphStyle(line_spacing=1.5)
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        result = style_manager.create_custom_style(test_style)
 | 
					 | 
				
			||||||
        if not result:
 | 
					 | 
				
			||||||
            print("✅ 正确阻止了内置样式覆盖")
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            print("❌ 错误地允许了内置样式覆盖")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    test_save_with_builtin_name()
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 3. 检查样式对象结构
 | 
					 | 
				
			||||||
    print("\n3. 检查样式对象结构")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    def test_complete_style_object():
 | 
					 | 
				
			||||||
        """测试完整的样式对象"""
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            # 创建完整的样式对象
 | 
					 | 
				
			||||||
            complete_style = DocumentStyle(
 | 
					 | 
				
			||||||
                name="结构测试样式",
 | 
					 | 
				
			||||||
                description="用于测试对象结构",
 | 
					 | 
				
			||||||
                body_font=FontStyle(name="微软雅黑", size=14, bold=False, italic=False, color="#000000"),
 | 
					 | 
				
			||||||
                body_paragraph=ParagraphStyle(line_spacing=1.5, space_before=0, space_after=0, first_line_indent=0.0)
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            # 添加标题样式
 | 
					 | 
				
			||||||
            complete_style.heading_styles = {}
 | 
					 | 
				
			||||||
            for level in range(1, 4):
 | 
					 | 
				
			||||||
                complete_style.heading_styles[level] = HeadingStyle(
 | 
					 | 
				
			||||||
                    font=FontStyle(name="微软雅黑", size=18-level*2, bold=True, color="#1F497D"),
 | 
					 | 
				
			||||||
                    paragraph=ParagraphStyle(line_spacing=1.3, space_before=12, space_after=6),
 | 
					 | 
				
			||||||
                    outline_level=level
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            print("✅ 样式对象结构创建成功")
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            # 测试序列化
 | 
					 | 
				
			||||||
            from dataclasses import asdict
 | 
					 | 
				
			||||||
            import json
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            style_dict = asdict(complete_style)
 | 
					 | 
				
			||||||
            json_str = json.dumps(style_dict, ensure_ascii=False, indent=2)
 | 
					 | 
				
			||||||
            print("✅ 样式对象序列化成功")
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            # 测试保存
 | 
					 | 
				
			||||||
            save_result = style_manager.create_custom_style(complete_style)
 | 
					 | 
				
			||||||
            if save_result:
 | 
					 | 
				
			||||||
                print("✅ 完整样式对象保存成功")
 | 
					 | 
				
			||||||
                return True
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                print("❌ 完整样式对象保存失败")
 | 
					 | 
				
			||||||
                return False
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
        except Exception as e:
 | 
					 | 
				
			||||||
            print(f"❌ 样式对象结构测试失败: {e}")
 | 
					 | 
				
			||||||
            traceback.print_exc()
 | 
					 | 
				
			||||||
            return False
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    structure_test_result = test_complete_style_object()
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 4. 检查不完整的样式对象
 | 
					 | 
				
			||||||
    print("\n4. 检查不完整样式对象的处理")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    def test_incomplete_style_object():
 | 
					 | 
				
			||||||
        """测试不完整的样式对象"""
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            # 创建不完整的样式对象(缺少必要字段)
 | 
					 | 
				
			||||||
            incomplete_style = DocumentStyle(
 | 
					 | 
				
			||||||
                name="不完整测试样式",
 | 
					 | 
				
			||||||
                description="用于测试不完整对象"
 | 
					 | 
				
			||||||
                # 故意不设置 body_font 和 body_paragraph
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            print(f"body_font是否为None: {incomplete_style.body_font is None}")
 | 
					 | 
				
			||||||
            print(f"body_paragraph是否为None: {incomplete_style.body_paragraph is None}")
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            # 由于__post_init__方法,这些应该被自动初始化
 | 
					 | 
				
			||||||
            if incomplete_style.body_font and incomplete_style.body_paragraph:
 | 
					 | 
				
			||||||
                print("✅ 不完整样式对象已自动补全")
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                save_result = style_manager.create_custom_style(incomplete_style)
 | 
					 | 
				
			||||||
                if save_result:
 | 
					 | 
				
			||||||
                    print("✅ 补全后的样式对象保存成功")
 | 
					 | 
				
			||||||
                    return True
 | 
					 | 
				
			||||||
                else:
 | 
					 | 
				
			||||||
                    print("❌ 补全后的样式对象保存失败")
 | 
					 | 
				
			||||||
                    return False
 | 
					 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                print("❌ 样式对象自动补全失败")
 | 
					 | 
				
			||||||
                return False
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
        except Exception as e:
 | 
					 | 
				
			||||||
            print(f"❌ 不完整样式对象测试失败: {e}")
 | 
					 | 
				
			||||||
            traceback.print_exc()
 | 
					 | 
				
			||||||
            return False
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    incomplete_test_result = test_incomplete_style_object()
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 5. 总结和建议
 | 
					 | 
				
			||||||
    print("\n=== 诊断结果总结 ===")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if structure_test_result and incomplete_test_result:
 | 
					 | 
				
			||||||
        print("✅ 样式对象结构正常")
 | 
					 | 
				
			||||||
        print("✅ 文件权限正常")
 | 
					 | 
				
			||||||
        print("✅ 内置样式保护正常")
 | 
					 | 
				
			||||||
        print("\n可能的问题和解决方案:")
 | 
					 | 
				
			||||||
        print("1. 确保样式名称不与内置样式重复")
 | 
					 | 
				
			||||||
        print("2. 检查是否在高级编辑器中输入了有效的样式名称")
 | 
					 | 
				
			||||||
        print("3. 确保修改后调用了正确的保存方法")
 | 
					 | 
				
			||||||
    else:
 | 
					 | 
				
			||||||
        print("❌ 发现问题,需要进一步修复")
 | 
					 | 
				
			||||||
        if not structure_test_result:
 | 
					 | 
				
			||||||
            print("- 样式对象结构存在问题")
 | 
					 | 
				
			||||||
        if not incomplete_test_result:
 | 
					 | 
				
			||||||
            print("- 样式对象自动补全机制存在问题")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def provide_save_tips():
 | 
					 | 
				
			||||||
    """提供保存操作的使用提示"""
 | 
					 | 
				
			||||||
    print("\n=== 正确的保存操作步骤 ===")
 | 
					 | 
				
			||||||
    print("1. 在高级编辑器中修改样式")
 | 
					 | 
				
			||||||
    print("2. 确保填写了样式名称(不能为空)")
 | 
					 | 
				
			||||||
    print("3. 确保样式名称不与内置样式重复")
 | 
					 | 
				
			||||||
    print("4. 点击'保存样式'或'另存为'按钮")
 | 
					 | 
				
			||||||
    print("5. 查看是否有错误提示对话框")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    print("\n内置样式列表(不能覆盖):")
 | 
					 | 
				
			||||||
    for i, name in enumerate(style_manager.builtin_styles.keys(), 1):
 | 
					 | 
				
			||||||
        print(f"  {i}. {name}")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    print("\n如果仍然保存失败,请:")
 | 
					 | 
				
			||||||
    print("1. 检查控制台输出的详细错误信息")
 | 
					 | 
				
			||||||
    print("2. 确认程序有写入权限")
 | 
					 | 
				
			||||||
    print("3. 尝试使用不同的样式名称")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == '__main__':
 | 
					 | 
				
			||||||
    diagnose_save_failure()
 | 
					 | 
				
			||||||
    provide_save_tips()
 | 
					 | 
				
			||||||
@ -1,193 +0,0 @@
 | 
				
			|||||||
"""
 | 
					 | 
				
			||||||
样式保存问题解决指南
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
import tkinter as tk
 | 
					 | 
				
			||||||
from tkinter import ttk, messagebox
 | 
					 | 
				
			||||||
from style_manager import style_manager
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def show_save_guide():
 | 
					 | 
				
			||||||
    """显示样式保存指南"""
 | 
					 | 
				
			||||||
    guide_window = tk.Toplevel()
 | 
					 | 
				
			||||||
    guide_window.title("样式保存问题解决指南")
 | 
					 | 
				
			||||||
    guide_window.geometry("600x500")
 | 
					 | 
				
			||||||
    guide_window.resizable(True, True)
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 创建滚动文本区域
 | 
					 | 
				
			||||||
    text_frame = ttk.Frame(guide_window)
 | 
					 | 
				
			||||||
    text_frame.pack(fill='both', expand=True, padx=10, pady=10)
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 滚动条
 | 
					 | 
				
			||||||
    scrollbar = ttk.Scrollbar(text_frame, orient="vertical")
 | 
					 | 
				
			||||||
    scrollbar.pack(side="right", fill="y")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 文本区域
 | 
					 | 
				
			||||||
    text_widget = tk.Text(text_frame, wrap=tk.WORD, yscrollcommand=scrollbar.set, 
 | 
					 | 
				
			||||||
                         font=("Microsoft YaHei", 10), padx=10, pady=10)
 | 
					 | 
				
			||||||
    text_widget.pack(side="left", fill="both", expand=True)
 | 
					 | 
				
			||||||
    scrollbar.config(command=text_widget.yview)
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 指南内容
 | 
					 | 
				
			||||||
    guide_content = """
 | 
					 | 
				
			||||||
📋 样式保存问题解决指南
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
如果您遇到"保存样式失败"的错误,请按照以下步骤排查和解决:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
🔍 问题诊断
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. 错误信息解读:
 | 
					 | 
				
			||||||
   • "不能覆盖内置样式" - 您使用了系统预设的样式名称
 | 
					 | 
				
			||||||
   • "文件权限问题" - 程序无法写入文件到磁盘
 | 
					 | 
				
			||||||
   • "样式对象结构错误" - 内部数据结构异常
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
2. 内置样式列表(不能覆盖):
 | 
					 | 
				
			||||||
   • 爆款文章风格
 | 
					 | 
				
			||||||
   • 微信公众号风格
 | 
					 | 
				
			||||||
   • 知乎高赞回答风格
 | 
					 | 
				
			||||||
   • 小红书笔记风格
 | 
					 | 
				
			||||||
   • 今日头条新闻风格
 | 
					 | 
				
			||||||
   • B站UP主视频脚本风格
 | 
					 | 
				
			||||||
   • 企业微信群通知风格
 | 
					 | 
				
			||||||
   • 情感鸡汤文风格
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
✅ 解决方案
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
一、样式名称问题:
 | 
					 | 
				
			||||||
   1. 确保样式名称不为空
 | 
					 | 
				
			||||||
   2. 不要使用上述内置样式名称
 | 
					 | 
				
			||||||
   3. 建议使用描述性名称,如"我的自定义样式"、"公司报告样式"等
 | 
					 | 
				
			||||||
   4. 如果要修改内置样式,请使用"另存为"功能
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
二、文件权限问题:
 | 
					 | 
				
			||||||
   1. 以管理员身份运行程序
 | 
					 | 
				
			||||||
   2. 检查程序目录是否有写入权限
 | 
					 | 
				
			||||||
   3. 确保磁盘空间充足
 | 
					 | 
				
			||||||
   4. 临时关闭杀毒软件的实时保护
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
三、系统问题:
 | 
					 | 
				
			||||||
   1. 重启程序再次尝试
 | 
					 | 
				
			||||||
   2. 检查是否有其他程序占用文件
 | 
					 | 
				
			||||||
   3. 更新到最新版本程序
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
🛠️ 正确的操作步骤
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
保存样式:
 | 
					 | 
				
			||||||
   1. 在高级编辑器中修改样式设置
 | 
					 | 
				
			||||||
   2. 在"基本信息"选项卡中输入样式名称
 | 
					 | 
				
			||||||
   3. 确保名称不与内置样式重复
 | 
					 | 
				
			||||||
   4. 点击"保存样式"按钮
 | 
					 | 
				
			||||||
   5. 等待确认消息
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
另存为新样式:
 | 
					 | 
				
			||||||
   1. 在高级编辑器中修改样式设置
 | 
					 | 
				
			||||||
   2. 点击"另存为"按钮
 | 
					 | 
				
			||||||
   3. 在弹出对话框中输入新名称
 | 
					 | 
				
			||||||
   4. 确保名称不重复
 | 
					 | 
				
			||||||
   5. 点击确定完成保存
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
📞 获取帮助
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
如果问题仍然存在:
 | 
					 | 
				
			||||||
   1. 查看控制台输出的详细错误信息
 | 
					 | 
				
			||||||
   2. 检查是否有特殊字符在样式名称中
 | 
					 | 
				
			||||||
   3. 尝试使用简单的英文名称测试
 | 
					 | 
				
			||||||
   4. 记录具体的错误步骤和错误信息
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
💡 最佳实践
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. 样式命名规范:
 | 
					 | 
				
			||||||
   • 使用有意义的描述性名称
 | 
					 | 
				
			||||||
   • 避免特殊字符和空格
 | 
					 | 
				
			||||||
   • 建议格式:项目_用途_版本,如"报告_标准_v1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
2. 定期备份:
 | 
					 | 
				
			||||||
   • 重要样式请导出保存
 | 
					 | 
				
			||||||
   • 定期备份样式文件夹
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
3. 测试流程:
 | 
					 | 
				
			||||||
   • 先用简单名称测试保存功能
 | 
					 | 
				
			||||||
   • 确认无误后再使用复杂样式
 | 
					 | 
				
			||||||
   • 修改重要样式前先备份
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
🔧 技术信息
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
样式文件位置:data/styles/
 | 
					 | 
				
			||||||
支持的操作:创建、修改、删除、导入、导出
 | 
					 | 
				
			||||||
文件格式:JSON格式
 | 
					 | 
				
			||||||
编码:UTF-8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
如果您按照此指南操作仍有问题,说明可能存在程序bug,
 | 
					 | 
				
			||||||
请联系技术支持并提供详细的错误信息。
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    text_widget.insert("1.0", guide_content)
 | 
					 | 
				
			||||||
    text_widget.config(state='disabled')
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # 底部按钮
 | 
					 | 
				
			||||||
    button_frame = ttk.Frame(guide_window)
 | 
					 | 
				
			||||||
    button_frame.pack(fill='x', padx=10, pady=10)
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    def check_current_styles():
 | 
					 | 
				
			||||||
        """检查当前样式状态"""
 | 
					 | 
				
			||||||
        styles = style_manager.get_style_names()
 | 
					 | 
				
			||||||
        builtin_count = len(style_manager.builtin_styles)
 | 
					 | 
				
			||||||
        custom_count = len(style_manager.custom_styles)
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        info = f"当前样式统计:\n\n"
 | 
					 | 
				
			||||||
        info += f"内置样式:{builtin_count} 个\n"
 | 
					 | 
				
			||||||
        info += f"自定义样式:{custom_count} 个\n"
 | 
					 | 
				
			||||||
        info += f"总计:{len(styles)} 个\n\n"
 | 
					 | 
				
			||||||
        info += "自定义样式列表:\n"
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        custom_names = list(style_manager.custom_styles.keys())
 | 
					 | 
				
			||||||
        if custom_names:
 | 
					 | 
				
			||||||
            for name in custom_names:
 | 
					 | 
				
			||||||
                info += f"  • {name}\n"
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            info += "  (暂无自定义样式)"
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        messagebox.showinfo("样式状态", info)
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    def test_save_permission():
 | 
					 | 
				
			||||||
        """测试保存权限"""
 | 
					 | 
				
			||||||
        import os
 | 
					 | 
				
			||||||
        import tempfile
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            styles_dir = style_manager.styles_dir
 | 
					 | 
				
			||||||
            test_file = os.path.join(styles_dir, "permission_test.tmp")
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            # 测试写入
 | 
					 | 
				
			||||||
            with open(test_file, 'w', encoding='utf-8') as f:
 | 
					 | 
				
			||||||
                f.write("permission test")
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            # 测试读取
 | 
					 | 
				
			||||||
            with open(test_file, 'r', encoding='utf-8') as f:
 | 
					 | 
				
			||||||
                content = f.read()
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            # 清理
 | 
					 | 
				
			||||||
            os.remove(test_file)
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            messagebox.showinfo("权限测试", "✅ 文件权限正常\n\n程序可以正常读写样式文件。")
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
        except Exception as e:
 | 
					 | 
				
			||||||
            error_msg = f"❌ 文件权限异常\n\n错误详情:{str(e)}\n\n"
 | 
					 | 
				
			||||||
            error_msg += "建议解决方案:\n"
 | 
					 | 
				
			||||||
            error_msg += "• 以管理员身份运行程序\n"
 | 
					 | 
				
			||||||
            error_msg += "• 检查磁盘空间是否充足\n"
 | 
					 | 
				
			||||||
            error_msg += "• 确认杀毒软件未阻止文件操作"
 | 
					 | 
				
			||||||
            messagebox.showerror("权限测试失败", error_msg)
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    ttk.Button(button_frame, text="检查当前样式", command=check_current_styles).pack(side='left', padx=5)
 | 
					 | 
				
			||||||
    ttk.Button(button_frame, text="测试保存权限", command=test_save_permission).pack(side='left', padx=5)
 | 
					 | 
				
			||||||
    ttk.Button(button_frame, text="关闭", command=guide_window.destroy).pack(side='right', padx=5)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def main():
 | 
					 | 
				
			||||||
    """主函数 - 独立运行指南"""
 | 
					 | 
				
			||||||
    root = tk.Tk()
 | 
					 | 
				
			||||||
    root.withdraw()  # 隐藏主窗口
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    show_save_guide()
 | 
					 | 
				
			||||||
    root.mainloop()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == '__main__':
 | 
					 | 
				
			||||||
    main()
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user