我试图让我的系统(MacOS的莫哈韦与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()
图像(512×512像素大小):
这是我所看到的:
正如你所看到的,图像大约是3个像素移动到左上角(注意在图像的右侧和底部的蓝色条)。作为画布具有输入图像的尺寸相同,我还以为这个代码应该使图像占据整个画布上的,而不是在测试Python版本(3.6.7,3.6.8和3.7的情况下。 2在MacOS莫哈韦,通过康达安装;的Python 3.7.2通过自制安装)。
N.B:这个例子完美的作品在Linux上。
另注:更改上述create_image
呼叫,使其在(3,3)
而不是(0,0)
锚解决了这个问题,而神奇。不知道这3角像素位移的起源......
问:如果没有锚定,而不是在(3,3)的图像(0,0) - 如何确保图像实际上占据整个画布的?是不是有什么错我的代码或这是一个错误(没有跟踪任何地方 - 但也许我的搜索富不是那么先进)?
我与测试受影响版本:
tkinter.TkVersion
)画布有一个边界,导致画布的内部略微偏移的一大亮点环。设置borderwidth
和highlightthicknes
选项为零。而且,由于你是靠pack
默认可以在不同平台上的不同,你应该明确地设置填充为零了。