Как правильно указать tkinter на изображение в другой папке? - PullRequest
0 голосов
/ 27 января 2020

Я создаю приложение tkinter, в котором я использую пользовательские изображения кнопок, а также пользовательский класс кнопок, чтобы кнопка имела эффект зависания. Сценарий работал нормально, когда изображения и сценарии находились в одной папке, однако, как только я попытался использовать модуль «os» или «path», python выдает мне эту ошибку.

"_ tkinter.TclError: image" N: \ Year 13 \ Computer Science \ Project \ AMFC \ Project files / Buttons / App button.gif "не существует"

Я убедился, что изображение на самом деле существует в пути, и я попытался построить путь, основываясь на «os.getcwd ()» и «os.path.join», а также на эквивалентном модуле «path». Я также попытался создать абсолютный путь к изображению, однако он все еще не работал.

work_folder = os.path.dirname(os.path.abspath(__file__))
button_path = os.path.join(work_folder, "Project files/Buttons")

Вот мой класс пользовательских кнопок:

class Button(tk.Button):
    def __init__(self, parent, default_background="", hover_background="", **kwargs):
        tk.Button.__init__(self, master=parent, **kwargs)
        self.default_background = tk.PhotoImage(file=default_background)
        self.hover_background = tk.PhotoImage(file=hover_background)
        self.configure(image=self.default_background)
        self.bind("<Enter>", self.on_enter)
        self.bind("<Leave>", self.on_leave)

    def on_enter(self, event):
        self.configure(image=self.hover_background)

    def on_leave(self, event):
        self.configure(image=self.default_background)

Вот как я применяю it:

import Customised_Widgets as cw    

cw.Button(self, text="Pure Core", default_background=os.path.join(button_path, "App button.gif"),
              hover_background=os.path.join(button_path, "Project files/Buttons/App button(hover).gif"),
              relief=tk.FLAT,highlightcolor="#E7E6E6",highlightbackground="#E7E6E6",
              bg="#E7E6E6", bd=0, padx=0, pady=0, borderwidth=0,
              highlightthickness=0, compound="center").place(x=434, y=270) 

Я создал кнопку в отдельном модуле, чтобы моя работа была более организованной. Этот отдельный модуль находится в той же папке, что и основной скрипт.

Я не знаю, что делать, я попытался дать полный путь к изображению, но он все равно не работал. Он отказывается обнаружить изображение в папке, на которую я указываю tkinter, даже если оно существует ...

Любая помощь будет признательна.

1 Ответ

0 голосов
/ 27 января 2020

Вы не должны использовать символы разделителя в os.path.join. Этот метод будет использовать правильный разделитель для вашего пути. Он отличается в разных операционных системах (для Windows это '\' и для Unix это '/'). Кроме того, вы можете написать кроссплатформенное программное обеспечение с этим решением.

Вам следует попробовать следующую реализацию:

os.path.join(button_path, "Project files", "Buttons", "App button(hover).gif")
...