【发布时间】:2019-02-02 18:48:09
【问题描述】:
我正在尝试在我的系统上制作一个非常简单的示例(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 像素):
这是我看到的:
如您所见,图像向左上方偏移了大约 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) - 如何确保图像实际占据整个画布?我的代码有问题还是这是一个错误(任何地方都没有痕迹 - 但也许我的 search-fu 不是那么先进)?
我测试的受影响版本:
- 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
【问题讨论】:
-
当您创建
Canvas时,请尝试同时指定borderwidth=0和highlightthickness=0
标签: python python-3.x macos tkinter