此程序中Tkinter遇到多个问题,但我在a separate question中张贴了其中一个问题(关于所用空白图像的大小)。
我在这里的担心是,我创建了一个包含画布和按钮的Tkinter GUI。最初创建所有内容时,我在画布上放置了空白的灰色图像。 (我的理解是,一旦我在Tkinter中调用主循环,如果我想在画布上放置新图像,则必须指定旧图像。因此,我不能只在画布上使用灰色背景,最初将图像放在画布上,所以我要替换一些东西。)
一个按钮调用getmap()例程,该例程将加载到BMP文件中并将其放在画布中。唯一的问题是我从未在画布上看到任何变化。 (请注意,我注释掉的那行会在画布上创建图像。无论该行是否起作用,我都尝试过它,但是它没有任何改变。)
这是程序:
#!/usr/bin/python
import datetime
import os
from PIL import Image, ImageTk
import sys
import Tkinter as tk
width = 640
height = 640
bmpfile = ""
guiRoot = tk.Tk()
pWindow = tk.Frame(guiRoot)
BlankImage = None
CanvasMap = None
def getmap():
print "Getting map..."
newimage = ImageTk.PhotoImage(Image.open(bmpfile))
print "File loaded."
#CanvasMap.create_image(0, 0, anchor=tk.NW, image=newimage)
CanvasMap.itemconfigure(BlankImage, image = newimage)
print "File on canvas."
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'll be 4 columns
bGet = tk.Button(guiRoot, text='Get Map Image', command=getmap)
bGet.grid(row=1, column=0, columnspan=4)
os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
guiRoot.mainloop()