Python缺少imag

2024-04-20 12:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我想创建一个窗口,显示一个图像(从一个特定的文件)和一个按钮来关闭窗口。 到目前为止,它显示窗口,调整窗口大小以适应图像,但不显示图像本身。 这是我目前掌握的情况

from Tkinter import *
import Image
import ImageTk
class MyApp:                         
  def __init__(self, rData):
    self.cont1 = Frame(rData)
    self.cont1.pack(side="top", padx=5, pady=5)    
    self.button1 = Button(rData) 
    self.button1["text"]= "Exit"     
    self.button1["background"] = "red"      
    self.button1.pack(side="bottom",padx=5, pady=5, fill=X)                         
    self.button1["command"]= rData.destroy
    self.picture1 = Label(self.cont1)
    self.picture1["image"] = ImageTk.PhotoImage(Image.open("fire.ppm"))
    self.picture1.pack(fill="both")  
root = Tk()
myapp = MyApp(root)  
root.mainloop()

当我写了同样的东西却没有把它写进课堂时,效果还不错。你知道吗


Tags: 图像imageimportselfrootsidemyapppack
1条回答
网友
1楼 · 发布于 2024-04-20 12:21:24

问题是您需要保留自己对所创建的PhotoImage的引用,否则python将对其进行垃圾收集,因为Tkinter不保留对它的引用。这要么是一个bug,要么是一个特性,这取决于你的想法。此代码应该可以解决您的问题:

from Tkinter import *
import Image
import ImageTk
class MyApp:                         
  def __init__(self, rData):
    self.cont1 = Frame(rData)
    self.cont1.pack(side="top", padx=5, pady=5)    
    self.button1 = Button(rData) 
    self.button1["text"]= "Exit"     
    self.button1["background"] = "red"      
    self.button1.pack(side="bottom",padx=5, pady=5, fill=X)                         
    self.button1["command"]= rData.destroy
    self.picture1 = Label(self.cont1)
    self.photoImage = ImageTk.PhotoImage(Image.open("fire.ppm"))   # This line prevents your photo image from getting garbage collected.
    self.picture1["image"] = self.photoImage
    self.picture1.pack(fill="both")  
root = Tk()
myapp = MyApp(root)  
root.mainloop()

相关问题 更多 >