【问题标题】:Unable to display image using tkinter [duplicate]无法使用 tkinter 显示图像 [重复]
【发布时间】:2017-12-24 15:09:05
【问题描述】:

我有以下代码:

from tkinter import *
import os
from PIL import ImageTk, Image
#Python3 version of PIL is Pillow

class Scope:
    def __init__(self, master):
        self.master = master        

        f = Frame(root)

        self.greet_button = Button(f, text="Back", command=self.back)
        self.greet_button.pack(side= LEFT)

        self.greet_button = Button(f, text="Detect", command=self.detect)
        self.greet_button.pack(side= LEFT)

        self.close_button = Button(f, text="Continue", command=master.quit)
        self.close_button.pack(side=LEFT)

        photo = PhotoImage(file='demo.gif')
        cv = Label(master, image=photo)
        cv.pack(side= BOTTOM)
        f.pack()

    def greet(self):
        print("Previous image...")

root = Tk()
my_gui = Scope(root)
root.mainloop()

我的第一个问题是,当我运行它时,所有按钮和窗口都会显示,但没有图像。有一个方形占位符表示图像应该在该框中,但实际上没有图像显示。如果我只需输入以下内容,我就可以显示图像:

root = Tk()

photo = PhotoImage(file='demo.gif')
label = Label(root, image=photo)
label.pack()

root.mainloop()

所以,我知道这是可能的。但我不知道我的 GUI 代码做错了什么。我已经尝试调试了很多,但似乎没有任何效果。

第二个问题是,我完全无法在 GUI 中显示 jpg 文件。我已经尝试过使用每个教程,但没有什么能奏效。理想情况下,我只希望能够显示jpg 图像,如果不可能,我将满足于显示gif

【问题讨论】:

  • 哎呀,好像我没有在寻找正确的东西@BryanOakley。在这种情况下我该怎么办?直接删掉?它确实有一个很好的答案。我还问了这个问题的第二部分。我应该重新格式化问题以包含它吗?
  • 对不起,我不知道重复。但是,您在 stackoverflow 上的第二部分也有答案,请参阅here。结论是:总是先谷歌。了解如何高效地使用 Google。

标签: python image python-3.x image-processing tkinter


【解决方案1】:

您对 photo 的引用在类被调用后被 Python 销毁/收集,因此标签无法显示任何内容。

为了避免这种情况,你必须保持对它的稳定引用,即将它命名为self.photo

from tkinter import *
import os
from PIL import ImageTk, Image
#Python3 version of PIL is Pillow

class Scope:
    def __init__(self, master):
        self.master = master    
        f = Frame(root)

        self.greet_button = Button(f, text="Back")  #, command=self.back)
        self.greet_button.pack(side=LEFT)

        self.greet_button = Button(f, text="Detect")  #, command=self.detect)
        self.greet_button.pack(side=LEFT)

        self.close_button = Button(f, text="Continue", command=master.quit)
        self.close_button.pack(side=LEFT)

        self.photo = PhotoImage(file='demo.gif')
        cv = Label(master, image=self.photo)
        cv.pack(side=BOTTOM)
        f.pack()

    def greet(self):
        print("Previous image...")

root = Tk()
my_gui = Scope(root)
root.mainloop()

PS:您的代码 sn-p 没有正常运行,因为缺少两个函数。

【讨论】:

    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2022-01-10
    • 2017-10-02
    相关资源
    最近更新 更多