【问题标题】:Tkinter PhotoImage in a class won't show类中的 Tkinter PhotoImage 不会显示
【发布时间】:2015-11-12 21:31:06
【问题描述】:

我有一个按钮,它显示一个带有图片标签的新框架。标签和图像与所有教程中的完全相同,但图片未显示。这是一个.gif。我究竟做错了什么? 这是我的代码:

from Tkinter import *

class Main(object):
    def __init__(self, root):
        self.f1=Frame(root)
        self.f1.grid()
        b1=Button(f1, command=self.photo, text="Picture")
        b1.grid()

    def photo(self):
        self.f1.destroy()
        self.f2=Frame(root)
        self.f2.grid()
        self.img1=PhotoImage("CO2_Levels.gif")
        self.l3=Label(self.f2, image=self.img1)
        self.l3.image=self.img1
        self.l3.grid()

root=Tk()
app=Main(root)
root.mainloop()

【问题讨论】:

    标签: python tkinter photoimage


    【解决方案1】:

    我知道这是一个老问题。但如果有人遇到同样的问题,这是因为当您从函数返回时,图像会被垃圾收集。为避免这种情况,您应该保留对图像对象的引用。你的拍照方法,

    def photo(self):
        self.f1.destroy()
        self.f2=Frame(root)
        self.f2.grid()
        self.img1=PhotoImage("CO2_Levels.gif")
        self.l3=Label(self.f2, image=self.img1)
        self.l3.image = self.img1 # Reference to the image object  
        self.l3.image=self.img1
        self.l3.grid()
    

    来源:http://effbot.org/tkinterbook/photoimage.htm

    【讨论】:

      【解决方案2】:

      默认的第一个参数是图像的名称。如果你给它一个文件路径,你需要在路径前面指定file=,这样PhotoImage就知道它是文件的路径而不是图像的名称。

      self.img1=PhotoImage(file="CO2_Levels.gif")
      

      【讨论】:

      • @JonahFleming:如果它说“找不到文件”,那么它肯定找不到文件。您必须对您认为它在哪里寻找,或者实际名称是什么做出了错误的假设。您可以相信错误消息会告诉您真相。您是否知道它不会在包含脚本的文件夹中查找?它在当前的工作目录中查找。
      • 好的,谢谢,我如何告诉它在不说路径的情况下查看它所在的目录,因为我可能需要移动文件?
      • P.S 你要找版主吗?我认为你应该这样做。
      • @JonahFleming:不,对成为版主不感兴趣。我宁愿写答案也不愿缓和它们。谢谢你的好话。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多