我有以下代码:
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
。
答案 0 :(得分:1)
在调用类之后,Python对photo
的引用会被销毁/ carbage收集,因此标签无法显示。
为了避免这种情况,你必须保持对它的稳定引用,即命名为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:您的代码段运行不正常,因为缺少两个功能。