作者ya790206 (残云夺月)
看板Python
标题Re: [问题] Tkinter 的一些问题
时间Thu Apr 8 18:53:11 2010
程式码改成这样就可以执行了
python 2.6 + pil
------------------------------------------
from Tkinter import *
import Image,ImageTk
c=None
class PopImage():
def __init__(self, root):
self.im = Image.open("a.jpg")
self.imforTk = ImageTk.PhotoImage(self.im)
label = Label(root, image=self.imforTk)
label.pack()
def showImage():
global root
global c
c=PopImage(root)
root = Tk()
b = Button(root, text = 'show', command = showImage)
b.pack()
root.mainloop()
--------------------------------------------
我自己测试的结果发现你不让Image.open()函数的物件有个变数参考的话
他会被回收(应该吧)导致图显示不出来
当你注解掉 global c ,因为c是区域变数
执行完後就会被回收(不一定立刻)
c被回收自然Image.open()出来的物件也会被回收
导致你显示不出图
你两个疑问都是因为上面原因所造成的
至於Image.open()出来的物件程式还会用到
却被回收的原因我不清楚
可能Tk/Tcl参考到的不算在python里吧(猜测)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.38.24.224
※ 编辑: ya790206 来自: 114.38.24.224 (04/08 18:56)
※ 编辑: ya790206 来自: 114.38.24.224 (04/08 18:57)
1F:推 nubi:大概了解一些原因了!!大感谢! 这 GC 好有效率 o_O 04/08 22:35
2F:→ nubi:了解以後更改了一下程式码目前暂时看起来还 ok ! 04/08 22:35