gpt4 book ai didi

python - 是否存在关于在 Canvas 上显示照片的已知 Win32 Tkinter 错误?

转载 作者:太空宇宙 更新时间:2023-11-03 13:54:18 25 4
gpt4 key购买 nike

我注意到 tkinter 有一个非常奇怪的错误,我想知道这是否是因为 python 与 tcl 交互的方式有问题,至少在 Win32 中是这样。

这里我有一个 super 简单的程序,可以显示 gif 图像。效果很好。

from Tkinter import *

canvas = Canvas(width=300, height=300, bg='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( )

现在,我稍微更改程序以从一个函数中编辑 Canvas 对象。这一次,我得到了一张空白的 Canvas 。

# demo all basic canvas interfaces
from Tkinter import *

canvas = Canvas(width=300, height=300, bg='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 对象被传递给一个函数,而不是被直接使用。两个打印语句返回相同的结果。我想知道 tcl/python 层的对象模型是否可能存在一些故障。

伙计们,有什么想法吗?

谢谢,/YGA

最佳答案

作为快速解决方案,我将尝试解释:

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 对象存储为实例变量。

关于python - 是否存在关于在 Canvas 上显示照片的已知 Win32 Tkinter 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/576843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com