You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的shutil复制文件时遇PySimpleGUI键错误求助

解决PySimpleGUI中values['-FOUT-']键错误的方案

可能的错误原因及修复方法

1. 键名完全不匹配

PySimpleGUI的键是严格区分大小写和特殊符号的,检查窗口布局里输出目录控件的键,必须和'-FOUT-'完全一致——不能写成'-fout-'、'FOUT',也不能少写前后的横杠。

举个正确的布局示例:

layout = [
    [sg.FolderBrowse('选输出目录', key='-FOUT-')],
    [sg.Button('开始复制')]
]

2. 提前访问values字典

一定要在调用window.read()之后,才能去取values里的键。要是你的复制代码写在window.read()之前,此时values字典还没被填充,肯定会报键不存在的错。

正确的代码流程应该是这样:

window = sg.Window('文件复制工具', layout)

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
    if event == '开始复制':
        # 这里才是访问values['-FOUT-']的正确时机
        src_path = r'.\[PARS] Template Directory\PAR\test.xlsx'
        dest_path = os.path.join(values['-FOUT-'], 'file.xlsx')
        # 先做有效性检查
        if os.path.exists(src_path) and values['-FOUT-']:
            shutil.copy2(src_path, dest_path)
        else:
            sg.popup('请选有效的输出目录,或检查源文件路径')

window.close()

3. 控件没绑定对应键

要是你的输出目录选择控件(比如FolderBrowse)没设置key='-FOUT-',那values字典里根本不会有这个键。赶紧去布局里检查控件的key参数有没有正确设置。

4. 源文件路径的隐藏问题

你写的源路径r'.[PARS] Template Directory\PAR\test.xlsx'有语法问题:原始字符串里,当前目录的子文件夹应该用.\[PARS],而不是.[PARS]——后者会被Python解析成奇怪的文件名,导致找不到源文件。修正后的路径应该是:

src_path = r'.\[PARS] Template Directory\PAR\test.xlsx'

实用调试技巧

  • 访问values['-FOUT-']前,先打印values字典,直接确认里面有没有这个键,以及对应的值是什么:
    print(values)
    
  • 加个异常捕获,方便快速定位问题:
    try:
        dest_path = os.path.join(values['-FOUT-'], 'file.xlsx')
        shutil.copy2(src_path, dest_path)
    except KeyError as e:
        sg.popup(f'键错误:{e},检查键名是否正确')
    except Exception as e:
        sg.popup(f'复制失败:{str(e)}')
    

内容的提问来源于stack exchange,提问作者Panda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:12:57