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

Kivy图片编辑应用文件拷贝失败问题求助

Kivy图片编辑应用文件拷贝异常的解决方法

问题描述

开发基于Kivy的图片编辑应用,用plyer的filechooser选图后路径显示正常,但拷贝功能出问题:

  • 往image_work_dir目录拷贝时触发FileNotFoundError,提示目录不存在
  • 往其他位置拷贝时无报错,但文件没复制成功
    试过shutil、os.system()都没用,且确认有项目目录的写入权限

代码(image_editing.py)

class LayoutSelectImagePath(BoxLayout):
    path_to_image = StringProperty("")
    def select_image(self):
        # 文件选择器返回选中文件的列表
        path_image = filechooser.open_file(title="选择图片",
                                     filters=[("图片", "*.jpg", "*.png", "*.ico", "*.bmp")])
        if len(path_image) > 0:
            self.path_to_image = path_image[0]  # UI正常显示路径
            self.copy_image()


    def copy_image(self):
        file_base = open(self.path_to_image, "rb") # 读取图片文件
        image_base = file_base.read()
        file_base.close()

        image_name = path.basename(self.path_to_image) # 获取图片文件名
        file_to_work = open(f"image_work_dir/{image_name}", "wb") # 写入到新目录(失败)
        file_to_work.write(image_base)
        file_to_work.close()

报错信息(仅拷贝到image_work_dir时出现)

File "C:\Users\Trist\PycharmProjects\dev_image_edit\image_editing.py", line 28, in copy_image
file_to_work = open(f"image_work_dir/{image_name}", "wb") # write the image in a new image file in a new dir (NOT OK)
FileNotFoundError: [Errno 2] No such file or directory: 'image_work_dir/test.jpg'

项目目录结构

根目录dev_image_edit下包含:

  • image_editing.py
  • image_work_dir目录
  • 其他Kivy相关配置/界面文件

解决步骤

1. 先检查并创建目标目录

报错的直接原因是:要么image_work_dir不存在,要么程序运行时的工作目录不是项目根目录,导致相对路径找不到。在写入前先确保目录存在:

import os
from pathlib import Path

def copy_image(self):
    # 获取当前代码文件所在目录,拼接出目标工作目录的绝对路径
    work_dir = Path(__file__).parent / "image_work_dir"
    # 若目录不存在则创建,已存在则不做操作
    work_dir.mkdir(exist_ok=True)
    
    image_name = os.path.basename(self.path_to_image)
    target_file_path = work_dir / image_name
    
    # 用shutil.copy2拷贝,比手动读写更可靠,还保留文件元数据
    import shutil
    shutil.copy2(self.path_to_image, target_file_path)

2. 用绝对路径避免工作目录陷阱

相对路径image_work_dir/xxx依赖程序运行时的工作目录,如果你的IDE运行程序时的工作目录不是项目根目录,就会找不到路径。用Path(__file__).parent获取代码文件所在的目录,再拼接目标目录,就能保证路径绝对正确。

3. 替换手动文件读写为shutil

手动打开文件读写容易出现资源泄漏(比如忘记关闭文件),shutil.copy2是专门的文件拷贝工具,代码更简洁,还能处理各种边缘情况。

4. 调试路径问题(可选)

如果还是有问题,加两行打印确认路径:

print("当前工作目录:", os.getcwd())
print("目标目录绝对路径:", work_dir)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:40:53