tkinter: убедитесь, что изображение заполняет весь холст - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь заставить очень простой пример работать на моей системе (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

Вот что я вижу:

canvas displayed

Как видите, изображение смещено на 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

1 Ответ

0 голосов
/ 02 февраля 2019

Холст имеет рамку и кольцо подсветки, из-за которого внутренняя часть холста слегка смещается.Установите параметры borderwidth и highlightthicknes на ноль.А поскольку вы полагаетесь на значения pack по умолчанию, которые могут отличаться на разных платформах, вам также следует явно установить нулевое заполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...