Кнопка Tkinter со значком: `_tkinter.TclError: изображение не существует` - PullRequest
0 голосов
/ 01 ноября 2019

В сценарии, который я пишу, мне нужна кнопка с маленькой корзиной для мусора в качестве значка. Я использую код, показанный ниже:

# Python 3.7.1
import tkinter as tk

master = tk.Tk()

photo = tk.PhotoImage(file="bin.png")

icon_button = tk.Button(master, image=photo)
icon_button.pack()

Возникает следующая ошибка: _tkinter.TclError: image "pyimage1. doesn't exist

Поскольку я указал bin.png в качестве файла изображения, я не могу понять, как pyimage1указано в ошибке.

После некоторой отладки я понял, что PhotoImage возвращает строку pyimage1 и, следовательно, дает "pyimage1" в качестве параметра для Button, но я все еще не 'не знаю, как исправить мою проблему.

1 Ответ

0 голосов
/ 02 ноября 2019

Проблема в том, что Относительный путь не будет принят, т.е. , если у вас есть bin.png в C:\, тогда вы должны сделать как-

tk.PhotoImage(file='C:\\bin.png')

Теперь,если вы все еще хотите использовать относительные пути, то следующее будет делать -

import tkinter as tk
import os

Win = tk.Tk()
Img = tk.PhotoImage(file=os.path.abspath('bin.png')

tk.Button(Win, image=Img).pack()
Win.mainloop()

или использовать это -

import sys, os

def get_path(file):
    if not hasattr(sys, ''):
        file = os.path.join(os.path.dirname(__file__), file) 
        return file
    else:
        file = os.path.join(sys.prefix, file)
        return file

Он просто получает полный путь к файлу.

Теперь используйте функцию-

...file=get_path('bin.png'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...