我正在使用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?我需要做些什么不同,所以当我对画布和图像使用相同的尺寸时,它们的尺寸将相同吗?
答案 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()