Невозможно отобразить изображение в tkinter после его открытия с помощью PIL - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь заставить tkinter открыть изображение, выбранное пользователем из приглашения файлового браузера, и отобразить его на холсте. Я планирую отредактировать это изображение позже, поэтому я использую PIL для редактирования и поддержки других типов файлов. Однако, когда я пытаюсь отобразить изображение, ничего не отображается и ошибок не возникает. Я действительно не знаю, почему это так. Я думаю, это может быть потому, что Image - это имя модуля, используемое как в tkinter, так и в PIL, но я не знаю наверняка.

Код:

from tkinter import *
from tkinter import filedialog
from PIL import ImageTk, Image

root = Tk()
canvas = Canvas(root, width=300, height=300)
canvas.pack(expand=YES, fill=BOTH)
img = Image.open(
    filedialog.askopenfilename(title="Select file", filetypes=(("jpeg files", "*.jpg"), ("all files", "*.*"))))
canvas.create_image(0, 0, image=ImageTk.PhotoImage(img), anchor=NW)
canvas.update()
root.mainloop()

1 Ответ

0 голосов
/ 11 июля 2020

Я обнаружил, что если вы разделите строку

canvas.create_image(0, 0, image=ImageTk.PhotoImage(img), anchor=NW)

на 2 отдельные строки,

img = ImageTk.PhotoImage(img)
canvas.create_image(0, 0, image=img, anchor=NW)

будет работать, я не уверен, почему, но это быстрое исправление.

...