首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tkinter画布上的图像显示不起作用

tkinter画布上的图像显示不起作用
EN

Stack Overflow用户
提问于 2013-11-19 09:26:27
回答 2查看 992关注 0票数 0

我正在试着写一个简单的绘画程序,我有全功能的保存和绘制功能,尽管在打开按钮的方法中,msg.create_image函数不显示图像。THere不是错误,只是图形用户界面和一个空白的大画布。这是我用python 2.7.5和PIL 1.1.7编写的代码,在windows 7 64位上写的,可以在运行OS X Mountain Lion,10.9 PS的windows和Mac上运行。他们可能因为将其复制到这篇文章而关闭。谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-11-19 10:18:54

您必须保留对图像tk_im的引用,因为一旦函数退出,它就会被垃圾回收。一种方法是将其添加到Canvas实例中。

代码语言:javascript
复制
 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)
票数 0
EN

Stack Overflow用户

发布于 2013-11-19 10:20:41

如果您在函数中创建ImageTk.PhotoImage并将其赋值给局部变量,则当您离开该函数时,垃圾收集器将销毁它。这就是为什么你看不到图像的原因。

你必须将它赋值给全局变量

代码语言:javascript
复制
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)

如果要添加更多图像,则必须记住全局列表中的所有图像。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20061396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档