Как добавить значки(картинки) в проект Python на VS CODE?

Создал нужный значок, добавил в папку с проектом. В самом редакторе файл отражается и открывается, но в программу не подтягивается

import tkinter as tk
win = tk.Tk()
photo = tk.PhotoImage(file= 'f.png')
win.iconphoto(False, photo)
win.config(bg='#007373')
win.title('мое приложение')
win.geometry('500x500+100+200')


win.mainloop()

вот такая ошибка:

PS G:\PYTHON> & C:/Users/***/AppData/Local/Programs/Python/Python310/python.exe g:/PYTHON/.vscode/project/123.py
Traceback (most recent call last):
  File "g:\PYTHON\.vscode\project\123.py", line 3, in <module>
    photo = tk.PhotoImage(file= 'f.png')
  File "C:\Users\***\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 4093, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "C:\Users\***\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 4093, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "C:\Users\***\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 4038, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't open "f.png": no such file or directory
PS G:\PYTHON>

введите сюда описание изображения


Ответы (1 шт):

Автор решения: insolor

В данном случае у вас как корень проекта в vscode открыта папка G:/PYTHON, она же в данном случае текущая папка. Из-за этого файл f.png ищется в ней.

Варианты решения:

  1. Открыть в vscode как проект папку G:/PYTHON/project
  2. Указывать путь относительно папку G:/PYTHON, т.е. photo = tk.PhotoImage(file='project/f.png')
  3. Программно определить папку, в которой лежит сам файл скрипта 123.py, указать путь относительно этой папки:
import tkinter as tk

from pathlib import Path

script_directory = Path(__file__).parent

win = tk.Tk()
photo = tk.PhotoImage(file=script_directory / 'f.png')
win.iconphoto(False, photo)
win.config(bg='#007373')
win.title('мое приложение')
win.geometry('500x500+100+200')
win.mainloop()
→ Ссылка