DQI-king 2025-05-13 14:25 采纳率: 0%
浏览 12

在dearpyui中的dpg.file_dialog选择文件时文件路径包含中文就好崩溃

在使用dearpyui创建文件选择对话框后,使用过程中只要路径包含中文,就会导致崩溃,有什么好的解决办法吗,代码片段如下:

# DearPyGui界面设置
with dpg.window(label="人员信息分组工具", width=600, height=400, pos=(0, 0), autosize=False) as main_window:
    # 界面标题
    dpg.add_text("请选择包含所有人员信息的Excel文件:", color=(255, 255, 255), bullet=True)

    # 选择文件按钮
    dpg.add_input_text(label="总表路径", default_value="./input", tag="total_excel_path", width=450)
    dpg.add_button(label="选择文件", callback=lambda: dpg.show_item("file_dialog_input"), width=250)
    dpg.add_text("", tag="file_label", color=(255, 255, 255))

    # 文件预览区
    dpg.add_text("", tag="data_preview_label", color=(255, 255, 255), wrap=500)
    # 输入框: 保存路径
    dpg.add_input_text(label="保存路径", default_value="./output", tag="save_path", width=450)
    dpg.add_button(label="选择保存路径", callback=lambda: dpg.show_item("file_dialog_output"), width=250)
    # 输入框: 每组人数
    dpg.add_input_int(label="每组人数", default_value=20, tag="group_size_input", width=200)
    # 开始分组按钮
    dpg.add_button(label="开始分组", callback=group_data, tag="group_button", enabled=False, width=250)
    # 状态标签
    dpg.add_text("", tag="status_label", color=(200, 0, 0))

    # 文件对话框
    with dpg.file_dialog(directory_selector=False, show=False, tag="file_dialog_input", callback=lambda s,a:select_file(s,a["file_path_name"]), width=700, height=400):
        print("file_dialog_input")
        dpg.add_file_extension(".xlsx")
    with dpg.file_dialog(directory_selector=True, show=False, tag="file_dialog_output", callback=lambda s, a: dpg.set_value("save_path", a["file_path_name"]), width=700, height=400):
        print("file_dialog_output")
def select_file(sender, app_data):
    file_path = app_data  # 直接获取路径
    print(f"选择的文件路径: {file_path}")
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-05-13 14:25
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    DearPyGui 在选择文件时,可能会出现崩溃的问题,这是因为 DearPyGui 使用的文件路径处理方式不支持中文。解决这个问题的一种方法是使用 os.path 模块来处理文件路径。

    你可以使用 os.path.encode 函数将文件路径编码为 UTF-8,例如:

    import os
    
    file_path = dpg.get_value("file_path")  # 获取文件路径
    file_path_encoded = os.path.encode(file_path, "utf-8")
    

    然后,在选择文件时,使用 file_path_encoded 作为文件路径。

    另外,你也可以使用 unicodedata 模块来 normalize 文件路径,例如:

    import unicodedata
    
    file_path = dpg.get_value("file_path")  # 获取文件路径
    file_path_normalized = unicodedata.normalize("NFKD", file_path)
    

    这将将文件路径 normalize 到 Unicode 字符串中,然后你可以使用 file_path_normalized 作为文件路径。

    代码示例

    import os
    import unicodedata
    
    with dpg.window(label="文件选择"):
        dpg.add_file_dialog("file_path", "选择文件", file_types=[("所有文件", "*.*")])
    
        def on_file_selected(file_path):
            file_path_encoded = os.path.encode(file_path, "utf-8")
            # 或者使用 normalize
            # file_path_normalized = unicodedata.normalize("NFKD", file_path)
            print(file_path_encoded)  # 或者 print(file_path_normalized)
    
        dpg.add_button("选择文件", callback=on_file_selected)
    

    在上面的代码中,我们使用 os.path.encode 函数将文件路径编码为 UTF-8,然后在选择文件时使用 file_path_encoded 作为文件路径。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月13日