【问题标题】:VSCode raising error when I try to import an Image in Python当我尝试在 Python 中导入图像时 VSCode 引发错误
【发布时间】:2021-03-18 22:09:38
【问题描述】:

我正在使用 Visual Studio Code 社区版。

我正在使用如下代码并运行它:

from tkinter import *
tk = Tk()
img = PhotoImage(pathtoimage)
Button(tk, image=img).pack()
tk.mainloop()

当我尝试运行它时,我得到了这个错误:

_tkinter.TclError: couldn't open "Resources/ytbanner.png": no such file or directory

我已经四次检查了它是否存在。我在 Resources 所在的目录中运行脚本,并且正在发生这种情况。 这是文件树:

Path to my desktop
    Projectname
        Script I'm using
        Resources
            PNG image I want to use

这是某种 VSCode 错误还是与目录有关?

我才 11 岁,所以请不要有毒

【问题讨论】:

  • 你确定 vscode 抛出错误?编辑器与我们的代码抛出的错误无关。它只是 python。
  • 你可以从import os; print(os.getcwd())找到你当前的工作目录,然后你可以从那里找到你的文件
  • 试试img = PhotoImage('resource/pathtoimage.png') ?如果它显示文件不存在的错误,那么它显然意味着该文件不存在于指定的位置,并且这个错误无论如何都不是由vscode抛出的,而是由python抛出的。根据您的文件树,图像位于资源文件夹中,因此您还必须将其包含在路径中(假设您使用的是相对路径)。
  • 我确定只有 VSCode 给出了错误。当我在普通的 Python IDE 中运行该文件时,它工作正常。
  • @Anupama 谢谢,我会试试的。

标签: python-3.x image tkinter visual-studio-code png


【解决方案1】:

这是 VS Code python 扩展的正常行为。它会自动 cd 进入工作区根目录。所以你必须定义从工作空间根到文件的路径。虽然此方法适用于 VS Code,但此代码会在其他编辑器上中断,因为它们不会 cwd 进入工作区文件夹。而且,如果您从 VS Code 打开脚本,但这次在不同的工作区(可能是以前的工作区文件夹的父级或其他东西)中打开脚本,则会引发错误。所以这个问题的解决方案是这样的:

import os
import sys

if sys.argv:
    filepath = sys.argv[0]
    folder, filename = os.path.split(filepath)
    os.chdir(folder) # now your working dir is the parent folder of the script

# and your code

如果您的代码没有在终端上运行,if 语句将返回 False,因此缩进块将不起作用。但是,通常当代码没有在终端上运行时,cwd 是我们想要的文件的父文件夹。

【讨论】:

    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    相关资源
    最近更新 更多