Tkinter图像没有';t显示Python 3.8 Windows 10
由于某种原因,当我运行程序时,图像不会显示。我只得到一个灰色的框,运行时没有错误。我想要的是,当用户点击上传按钮时,第二个窗口将打开,询问他们的电子邮件地址和密码。我想要的灰显位置的文件是一个徽标(在电子邮件请求上方)。文件cats.jfif与我的程序位于同一文件夹中。最后,我想添加一个png图像(不知道这是否重要)。输出的代码和图像如下:Tkinter图像没有';t显示Python 3.8 Windows 10,python,image,tkinter,Python,Image,Tkinter,由于某种原因,当我运行程序时,图像不会显示。我只得到一个灰色的框,运行时没有错误。我想要的是,当用户点击上传按钮时,第二个窗口将打开,询问他们的电子邮件地址和密码。我想要的灰显位置的文件是一个徽标(在电子邮件请求上方)。文件cats.jfif与我的程序位于同一文件夹中。最后,我想添加一个png图像(不知道这是否重要)。输出的代码和图像如下: import tkinter as tk from tkinter import ttk import tkinter.font as tkFont fro
import tkinter as tk
from tkinter import ttk
import tkinter.font as tkFont
from PIL import ImageTk
from PIL import Image as PilImage
class Other:
def __init__(self,master):
self.width = 300
self.height = 500
master.geometry(f"{self.width}x{self.height}")
self.frame = tk.Frame(master,bg="white")
self.frame.place(relx=0, rely=0, relwidth=1, relheight=1)
self.font = ('Helvetica', '10')
self.uploadButton = tk.Button(self.frame, text="Upload", bg="orange", fg="white", font=self.font,
command = self.Upload)
self.uploadButton.place(relx=0.001, rely=0.865, relwidth=0.999, relheight=0.13)
def Upload(self):
#HAVE TO CHECK IF FILE EXISTS IN THE FOLDER
#f"{self.date}_iProdi.xlsx"
login = tk.Toplevel()
login.geometry("300x500")
self.frame2 = tk.Frame(login, bg = "white")
self.frame2.place(relx=0, rely=0, relwidth=1, relheight=1)
img = ImageTk.PhotoImage(PilImage.open("cats.jfif"))
self.panel = tk.Label(self.frame2, image = img)
self.panel.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.2)
#Employee username
self.emailLabel = tk.Label(self.frame2, text="Email:", font=self.font, bg="white", anchor="e")
self.emailLabel.place(relx=0.1, rely=0.4, relwidth=0.25, relheight=0.08)
self.emailEntry = tk.Entry(self.frame2, font=self.font, bg="white")
self.emailEntry.place(relx=0.37, rely=0.4, relwidth=0.4, relheight=0.06)
#Employee Password
self.passwordLabel = tk.Label(self.frame2, text="Password:", font=self.font, bg="white", anchor="e")
self.passwordLabel.place(relx=0.1, rely=0.56, relwidth=0.25, relheight=0.08)
self.passwordEntry = tk.Entry(self.frame2, font=self.font, bg="white", show="*")
self.passwordEntry.place(relx=0.37, rely=0.56, relwidth=0.4, relheight=0.06)
root = tk.Tk()
other = Other(root)
root.mainloop()
找到了解决方案
显然,tkinter会破坏图像,因此您需要自己保留图像的引用。找到了解决方案
显然,tkinter会破坏图像,因此您需要自己保留图像的引用。在tkinter中,加载图像时出现问题。 当您尝试加载图像时,必须确保存储加载图像的变量不会被破坏,否则图像也会在tkinter中被破坏 在您的代码中,您正在将图像加载到
img
局部变量中,该变量在执行方法
后会被“destroed”,因此您的图像会被删除
在这种情况下,要保存图像引用,只需在变量名之前添加self.
,即可将变量保存为类变量并防止其树折叠
self.img = ImageTk.PhotoImage(PilImage.open("4.jpg"))
self.panel = tk.Label(self.frame2, image = self.img)
常见用法是将图像引用存储在数组中
是一个类似的问题在tkinter中,加载图像有问题。 当您尝试加载图像时,必须确保存储加载图像的变量不会被破坏,否则图像也会在tkinter中被破坏 在您的代码中,您正在将图像加载到
img
局部变量中,该变量在执行方法
后会被“destroed”,因此您的图像会被删除
在这种情况下,要保存图像引用,只需在变量名之前添加self.
,即可将变量保存为类变量并防止其树折叠
self.img = ImageTk.PhotoImage(PilImage.open("4.jpg"))
self.panel = tk.Label(self.frame2, image = self.img)
常见用法是将图像引用存储在数组中
是一个类似的问题将
img=ImageTk.PhotoImage(…)
更改为self.img=…
。类似的问题已经被问了很多次。将img=ImageTk.PhotoImage(…)
更改为self.img=…
。类似的问题已经被问过很多次了。