为什么Tkinter 1/4中的空白图像是我指定的大小?

时间:2018-07-13 01:55:48

标签: python tkinter

我正在使用Tkinter在Python程序中创建画布,并在其中放置纯色单色图像。 (我在那里需要一个图像,因为稍后我将用另一个图像替换该图像,这就是为什么我不只是指定背景。)

我指定画布的大小,并在打开窗口时检查它。是640x640。我将空白灰度图像指定为相同大小,但它的大小为320x320,仅占画布的四分之一。

我知道我可以将图像大小更改为1280x1280,以便整个画布为灰色,但是当我向画布中添加其他图像时,我不想遇到类似的问题。

这是程序:

#!/usr/bin/python

import datetime
import os
from PIL import Image, ImageTk
import sys
import Tkinter as tk

width = 640
height = 640

guiRoot = tk.Tk()
pWindow = tk.Frame(guiRoot)
BlankImage = None
CanvasMap = None

if __name__ == "__main__":

    bmpfile = sys.argv[1]
    print "Working with file: %s" % bmpfile

    BlankImage = ImageTk.PhotoImage(Image.new('RGB', (width, height), 'gray'))
    CanvasMap = tk.Canvas(guiRoot, width=width, height=height)
    CanvasMap.create_image(0, 0, image=BlankImage)

    CanvasMap.grid(row=0, column=0, columnspan=4)  #later it's 4 columns

    os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
    guiRoot.mainloop()

运行时,看起来像这样。

为什么图像只有画布大小的1/4?我需要做些什么不同,所以当我对画布和图像使用相同的尺寸时,它们的尺寸将相同吗?

Image of open window with 1/4 size blank gray image

1 个答案:

答案 0 :(得分:3)

将显示整个图像,但以画布原点(0, 0)为中心,这就是为什么您只能看到其右下角1/4的原因。

您需要将显示设置关闭到画布(WIDTH // 2, HEIGHT // 2)的中心,或者将图像手柄设置到左上角。

这是一种方法:

import datetime
import os
from PIL import Image, ImageTk
import sys
import Tkinter as tk

width = 640
height = 640

guiRoot = tk.Tk()
pWindow = tk.Frame(guiRoot)
BlankImage = None
CanvasMap = None

if __name__ == "__main__":

    bmpfile = sys.argv[1]
#     print "Working with file: %s" % bmpfile

    BlankImage = ImageTk.PhotoImage(Image.new('RGB', (width, height), 'gray'))
    CanvasMap = tk.Canvas(guiRoot, width=width, height=height)
    CanvasMap.create_image(width//2, height//2, image=BlankImage)

    CanvasMap.grid(row=0, column=0, columnspan=4)  #later it's 4 columns

    os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
    guiRoot.mainloop()