Python, tkinter: 为什么这个jpeg不显示?
我想在我的图形界面窗口上显示一张来自互联网的图片。
到目前为止,我的代码是:
picURL = "https://graph.facebook.com/" + ID + "/picture"
picBytes= urlopen(picURL).read()
picData = io.BytesIO(picBytes)
picPil = Image.open(picData)
picTk = ImageTk.PhotoImage(picPil)
label = Label(image = picTK, bg = "blue").pack()
问题是我看到的只是一个蓝色的框框,而不是图片。这个怎么解决呢?
我在Windows上使用的是Python 3.3。
1 个回答
1
这只是我的一个大胆猜测,但我突然想起了一个类似的问题。我用这种方法复现了你提到的“蓝色框”,所以这可能也是你的问题。我就试试看。
我猜测这个PhotoImage是在其他地方创建的(可能是在一个叫showImage(self, id)
的方法里),而且在这个方法结束后没有保留对它的引用。这样一来,PhotoImage
在这个方法结束时就会被垃圾回收,即使它在Label中被使用!
你可以试着创建一个在整个窗口生命周期内都存在的变量,并把PhotoImage绑定到这个变量上(比如在使用类做GUI时,可以用self.images[ID]
,如果不是类的话,就用一些全局变量)。如果我猜得没错,这确实是问题所在,那么这样做应该会有帮助。