为什么新图像没有出现在Tkinter画布中?

时间:2018-07-13 02:57:12

标签: python canvas tkinter

此程序中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()

0 个答案:

没有答案