我试图让我的系统(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 Mojave上通过conda安装;在Python 3.7.2中通过自制程序安装。
N.B .:本实施例工作完美无缺Linux上。
另一注:更改上面的create_image
调用,使其固定在(3,3)
而不是(0,0)
上,这很神奇地解决了这个问题。不知道这3个像素的起源位移...
问:如果没有锚定在(3,3)的图像,而不是(0,0) - 如何确保图像实际上占据整个画布的?是不是有什么错我的代码,或者这是一个错误(没有跟踪任何地方 - 但也许我的搜索富不是那么先进)?
我与测试受影响的版本:
tkinter.TkVersion
)答案 0 :(得分:0)
在画布具有边框和这将导致帆布的内部的高亮环略微偏移。将borderwidth
和highlightthicknes
选项设置为零。而且由于您所依赖的pack
默认值在不同平台上可能会有所不同,因此您也应该将填充值也明确设置为零。