我正在试着写一个简单的绘画程序,我有全功能的保存和绘制功能,尽管在打开按钮的方法中,msg.create_image函数不显示图像。THere不是错误,只是图形用户界面和一个空白的大画布。这是我用python 2.7.5和PIL 1.1.7编写的代码,在windows 7 64位上写的,可以在运行OS X Mountain Lion,10.9 PS的windows和Mac上运行。他们可能因为将其复制到这篇文章而关闭。谢谢
发布于 2013-11-19 10:18:54
您必须保留对图像tk_im的引用,因为一旦函数退出,它就会被垃圾回收。一种方法是将其添加到Canvas实例中。
def opens():
global img,msg,idraw
filename = askopenfilename()
im = Image.open(filename)
msg.tk_im = ImageTk.PhotoImage(im) ## <------------
a=msg.create_image(0,0,image=msg.tk_im)
idraw=ImageDraw.Draw(im)发布于 2013-11-19 10:20:41
如果您在函数中创建ImageTk.PhotoImage并将其赋值给局部变量,则当您离开该函数时,垃圾收集器将销毁它。这就是为什么你看不到图像的原因。
你必须将它赋值给全局变量
tk_im = None
def opens():
global img,msg,idraw
global tk_im
filename = askopenfilename()
im = Image.open(filename)
tk_im = ImageTk.PhotoImage(im)
a = msg.create_image(0,0,image=tk_im)
idraw = ImageDraw.Draw(im)如果要添加更多图像,则必须记住全局列表中的所有图像。
tk_im = []
def opens():
global img,msg,idraw
global tk_im
filename = askopenfilename()
im = Image.open(filename)
tk_im.append( ImageTk.PhotoImage(im) )
a = msg.create_image(0,0, image=tk_im[-1] )
idraw = ImageDraw.Draw(im)https://stackoverflow.com/questions/20061396
复制相似问题