Почему изображение не появляется? Python
from tkinter import *
from PIL import ImageTk, Image
def ha(root):
img = ImageTk.PhotoImage(Image.open("256.jpg"))
panel = Label(root, image=img)
panel.grid(column=0, row=1)
root = Tk()
ha(root)
root.mainloop()
Я думаю тут проблема в том, что переменная img удаляется сборщиком мусора. Как это можно разрешить?
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
from tkinter import *
from PIL import ImageTk, Image
def ha(img):
# img = ImageTk.PhotoImage(Image.open("im.png")) # ---
panel = Label(root, image=img)
panel.grid(column=0, row=1)
root = Tk()
img = ImageTk.PhotoImage(Image.open("im.png")) # +++
ha(img)
root.mainloop()
Update
или так
from tkinter import *
from PIL import ImageTk, Image # pip install pillow
class MainWindow():
def __init__(self, root):
self.root = root
self.root.resizable(True, True) # (False, False)
self.root.protocol("WM_DELETE_WINDOW")
self.root.iconbitmap("music.ico")
self.root.title("Tkinter - ImageTk")
self.ha()
def ha(self):
self.image = ImageTk.PhotoImage(Image.open("im.png"))
self.panel = Label(self.root, image=self.image)
self.panel.grid(column=0, row=1)
if __name__ == '__main__':
root = Tk()
w = MainWindow(root)
root.mainloop()
Автор решения: llollcat
→ Ссылка
from tkinter import *
from PIL import ImageTk, Image
global img # +++
def ha():
global img # +++
img = ImageTk.PhotoImage(Image.open("256.jpg"))
panel = Label(root, image=img)
panel.grid(column=0, row=1)
root = Tk()
ha()
root.mainloop()
Таким образом сборщик не удалит переменную, и я смогу использовать свою колхозную функцию.


