如何在Python中正确显示图像?

如何在Python中正确显示图像?,python,python-3.x,tkinter,python-imaging-library,Python,Python 3.x,Tkinter,Python Imaging Library,我发现这个代码: 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)

我发现这个代码:

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的窗口中,但窗口大小是正确的。 . 我做错了什么


顺便说一句,很抱歉英语不好。

哦,不,你的第一个示例仍然被截断了几个像素。所有顶层窗口的绝对边框周围都会有填充物,以防止其他元素“出血”到边框中,看起来不专业

仍然会给您一个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)

问题中链接的屏幕截图显示,窗口边框不包含在大小中,窗口边框和图像之间还有额外的空白。