为何我的Tkinter文件打开代码无法正常运行?
问题分析与修复
核心问题:路径转义错误
你的filedialog.askopenfilename第一行里的initialdir='C:\Users\peter\Downloads'存在格式问题——Python会把字符串中的\U识别为特殊转义序列,导致路径解析失败,这就是第一行代码无法正常工作的直接原因。
修复步骤
1. 修正路径表示方式
把路径改成原始字符串(前缀加r)或者使用双反斜杠,避免转义冲突:
# 推荐:原始字符串写法 initialdir=r'C:\Users\peter\Downloads' # 备选:双反斜杠写法 initialdir='C:\\Users\\peter\\Downloads'
2. 处理用户取消选择的场景
如果用户点击文件选择框的「取消」按钮,spreadsheet_filepath会返回空字符串,后续代码会直接报错,需要提前判断并终止函数:
if not spreadsheet_filepath: return
3. 替换为更高效的文件复制逻辑
你当前用pandas读取再写入CSV的方式,对于单纯复制文件的需求完全冗余——既降低效率,还可能意外修改文件格式(比如日期、数字精度)。直接用shutil.copy实现文件复制更合理:
import shutil # ... shutil.copy(spreadsheet_filepath, output_path)
4. 确保目标目录存在
如果csv files目录尚未创建,复制操作会失败,需要提前检查并创建目录:
os.makedirs('csv files', exist_ok=True)
修改后的完整代码
import os import shutil from tkinter import filedialog import ttkbootstrap as tb root = tb.Window(themename='superhero') def add_spreadsheet(): # 修复路径转义问题 spreadsheet_filepath = filedialog.askopenfilename( initialdir=r'C:\Users\peter\Downloads', title='Select A File', filetypes=(('csv files', '*.csv'),) ) # 处理用户取消选择的情况 if not spreadsheet_filepath: return file_name = os.path.basename(spreadsheet_filepath) # 确保目标目录存在 os.makedirs('csv files', exist_ok=True) output_path = os.path.join('csv files', file_name) # 直接复制文件,替代冗余的pandas读写操作 shutil.copy(spreadsheet_filepath, output_path) home_add_btn = tb.Button(root, text='Add', command=add_spreadsheet) home_add_btn.pack(anchor='center', pady=10) root.mainloop()
内容的提问来源于stack exchange,提问作者Richmond Nguyen
相关产品推荐
相关产品推荐

