2016-07-31 2 views
1

Я нашел этот код:Как правильно отображать изображение на Python?

from PIL import Image, ImageTk 
import tkinter as tk 

root = tk.Tk() 

img = Image.open(r"Sample.jpg") 
canvas = tk.Canvas(root, width=500, height=500) 
canvas.pack() 
tk_img = ImageTk.PhotoImage(img) 
canvas.create_image(250, 250, image=tk_img) 

root.mainloop() 

Он отображает любую картинку в разрешении 500x500px. Я пытался изменить его и отобразить его в оригинальном размере:

from PIL import Image, ImageTk 
import tkinter as tk 

root = tk.Tk() 

img = Image.open(r"D:/1.jpg") 
canvas = tk.Canvas(root, width=img.width, height=img.height) 
canvas.pack() 
tk_img = ImageTk.PhotoImage(img) 
canvas.create_image(img.width/2, img.height/2, image=tk_img) 

root.mainloop() 

Но что-то пошло не так, и картина с размером 604x604px показывает в окне с размером 602x602px, но размер окна правильно. Take a look(full image). Что я делаю неправильно?

P.S. Извините за плохой английский.

ответ

0

Ну, нет, ваш первый пример по-прежнему сокращается на несколько пикселей. Все окна верхнего уровня будут иметь прокладку вокруг своих абсолютных границ, чтобы не допустить, чтобы другие элементы «кровоточили» в границах и выглядели непрофессионально.

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

Другой вопрос, если вы стремитесь к точности, был бы линия ...

canvas.create_image(img.width/2, img.height/2, image=tk_img) 

Что может создать внедорожную чередой ошибки, если ваша ширина или высота составляет нечетное число. Вы можете прикрепить изображения на северо-западном углу и поместите их в координатах (0, 0), как например:

canvas.create_image(0, 0, anchor=tk.NW, image=tk_img) 
+0

снимок экрана связан в вопросе показывает, что окна границы не включены в размер, есть дополнительный пробел пространство между границей окна и изображением. –

Смежные вопросы