Я пытаюсь заставить очень простой пример работать на моей системе (macOS Mojave с Python 3.6+).Интересно, я делаю что-то в корне неправильно?Минимальное воспроизведение:
import tkinter
from PIL import Image, ImageTk
img = Image.open('lenna.png')
root = tkinter.Tk()
canvas = tkinter.Canvas(root, width=img.width, height=img.height,
background='blue')
canvas.pack()
tkimg = ImageTk.PhotoImage(img)
imagesprite = canvas.create_image(0, 0, anchor=tkinter.NW, image=tkimg)
root.mainloop()
Изображение (размером 512x512 пикселей):
![lenna.png](https://i.stack.imgur.com/AhFkA.png)
Вот что я вижу:
![canvas displayed](https://i.stack.imgur.com/mLI9C.png)
Как видите, изображение смещено на 3 пикселя вверху слева (обратите внимание на синие полосы справа и снизу изображения).Поскольку холст имеет те же размеры входного изображения, я думал, что этот код должен заставить изображение занимать весь холст, но это не так в протестированных версиях Python (3.6.7, 3.6.8 и 3.7.2 на macOS Mojave, установленном через conda; Python 3.7.2 установлен через homebrew).
Примечание: этот пример работает безупречно в Linux.
Еще одно примечание: изменив приведенный выше вызов create_image
, чтобыто, что он привязан к (3,3)
вместо (0,0)
, решает эту проблему, скорее волшебным образом.Не уверен в происхождении этих смещений в 3 пикселя ...
Вопрос: Без привязки изображения к (3,3) вместо (0,0) - как убедиться, что изображение фактически занимает весь объект?холст?Что-то не так с моим кодом или это ошибка (нигде нет следов - но, возможно, моя поисковая система не настолько продвинута)?
Подвергнутая влиянию версия, с которой я тестировал:
- python 3.6.7, 3.6.8, 3.7.2 от conda (канал по умолчанию) с TclVersion и TkVersion = 8,6 (
tkinter.TkVersion
) - Python 3.7.2 с домашнего пива с TclVersion и TkVersion = 8,5