当前位置:  开发笔记 > 编程语言 > 正文

在画布上显示照片有没有已知的Win32 Tkinter错误?

如何解决《在画布上显示照片有没有已知的Win32Tkinter错误?》经验,为你挑选了1个好方法。

我注意到tkinter有一个非常奇怪的错误,我想知道是不是因为python如何与tcl交互,至少在Win32中.

在这里,我有一个超级简单的程序,显示一个gif图像.它完美地运作.

from Tkinter import *

canvas = Canvas(white')   
canvas.pack()

photo=PhotoImage(file=sys.argv[1])
canvas.create_image(0, 0, image=photo, anchor=NW)  # embed a photo
print canvas
print photo

mainloop( )

现在,我稍微更改程序以在函数内编辑画布对象.这次,我只得到一块空白画布.

# demo all basic canvas interfaces
from Tkinter import *

canvas = Canvas(white')

canvas.pack()

def set_canvas(cv):
    photo=PhotoImage(file=sys.argv[1])
    cv.create_image(0, 0, image=photo, anchor=NW)  # embed a photo
    print cv
    print photo

set_canvas(canvas)
mainloop( )

两者之间的唯一区别是,在一个中,canvas对象被传递给函数而不是直接使用.两个print语句都返回相同的结果.我想知道在tcl/python层的对象模型中是否存在某些故障.

伙计们,有什么想法吗?

谢谢,/ YGA



1> tzot..:

这是一个快速的解决方案,我会尝试解释:

def set_canvas(cv):
    global photo # here!
    photo=PhotoImage(file=sys.argv[1])
    cv.create_image(0, 0, image=photo, anchor=NW)  # embed a photo
    print cv
    print photo

PhotoImage需要至少有一个来自任何Python对象的引用,否则它将被垃圾收集.在我的解决方案中,我建议将photo其作为模块级名称,因此当函数结束时,仍然会有对PhotoImage对象的引用.您可能更喜欢创建一个类并set_canvas生成方法,并将PhotoImage对象存储为实例变量.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有