我的 Tkinter 照片已打包,但显示为空白
My Tkinter photo is packed, but it shows as a blank
当我的主框架(根)之上有一个顶层框架时,我似乎无法让图片显示在屏幕上。这个就叫做"frame"。我已经在这张 post 中包含的照片上圈出了 tkinter Frame 的轮廓。当我调整图片大小时,绿框轮廓发生变化,但图片本身不会显示。
我还尝试将它打包到我的主根 window 上,但成功了,这表明这是一个顶级 window 问题。我只是不知道那是什么。有什么想法吗?
这是我的代码:
def show_topLevelWindow():
from tkinter import ttk
print("Entered to show results")
window_linkedin = Toplevel(root)
window_linkedin.geometry('1000x590')
frame = Frame(window_linkedin)
frame.pack()
error_frame = tkinter.Frame(frame, highlightbackground="green", highlightcolor="green", highlightthickness=1)
error_label = Label(frame, text="It appears there are no results for the selected country")
error_label.config(font=("Helvetica Neue", 20))
im_error = Image.open("./ressources/images_gui/aw_snap.png")
im_error = im_error.resize((500, 500), Image.ANTIALIAS)
im_error = ImageTk.PhotoImage(file = "./ressources/images_gui/aw_snap.png")
im_error_label = Label(frame, image=im_error)
try:
if ....:
....unimportant code ....
else:
error_label.pack(in_=error_frame)
im_error_label.pack(in_=error_frame)
error_frame.pack(anchor="center")
except Exception as e:
error_label.pack(in_=error_frame)
im_error_label.pack(in_=error_frame)
error_frame.pack(anchor="center")
Packed image shows as blank
您遇到的最重要的一个问题是您的图像没有保存以供参考。如果您将 global im_error
添加到函数的最顶部,您的图像将可见。
也就是说您的代码存在一些问题,您应该更正。
第一:不要在函数中导入。而是将所有导入写在代码的顶部。
其次:我不确定你为什么要这样做.pack(in_=error_frame)
。这不是一个人真正需要的东西。只需确保您的标签已分配给正确的框架即可。 in_
参数很少使用,可能大多数人从未使用过它。我已经在这里工作两年了,这是我第一次看到有人使用这种论点。
第三:您还没有显示 Tkinter 的导入,但是根据您编写代码的方式,看起来您已经完成了:
import tkinter
from tkinter import *
这太过分了,不是个好主意。只需执行 import tkinter as tk
并确保在适用的地方使用 tk.
前缀。
这是您重写的代码:
import tkinter.ttk as ttk
import tkinter as tk
from PIL import ImageTk, Image
def show_toplevel_window():
global im_error
window_linkedin = tk.Toplevel(root)
window_linkedin.geometry('1000x590')
frame = tk.Frame(window_linkedin)
frame.pack()
error_frame = tk.Frame(frame, highlightbackground="green", highlightcolor="green", highlightthickness=1)
error_frame.pack()
error_label = tk.Label(frame, font=("Helvetica Neue", 20), text="It appears there are no results for the selected country")
error_label.pack()
im_error = Image.open("./ressources/images_gui/aw_snap.png")
im_error = im_error.resize((500, 500), Image.ANTIALIAS)
im_error = ImageTk.PhotoImage(file = "./ressources/images_gui/aw_snap.png")
im_error_label = tk.Label(error_frame, image=im_error)
im_error_label.pack()
root = tk.Tk()
show_toplevel_window()
root.mainloop()
当我的主框架(根)之上有一个顶层框架时,我似乎无法让图片显示在屏幕上。这个就叫做"frame"。我已经在这张 post 中包含的照片上圈出了 tkinter Frame 的轮廓。当我调整图片大小时,绿框轮廓发生变化,但图片本身不会显示。
我还尝试将它打包到我的主根 window 上,但成功了,这表明这是一个顶级 window 问题。我只是不知道那是什么。有什么想法吗?
这是我的代码:
def show_topLevelWindow():
from tkinter import ttk
print("Entered to show results")
window_linkedin = Toplevel(root)
window_linkedin.geometry('1000x590')
frame = Frame(window_linkedin)
frame.pack()
error_frame = tkinter.Frame(frame, highlightbackground="green", highlightcolor="green", highlightthickness=1)
error_label = Label(frame, text="It appears there are no results for the selected country")
error_label.config(font=("Helvetica Neue", 20))
im_error = Image.open("./ressources/images_gui/aw_snap.png")
im_error = im_error.resize((500, 500), Image.ANTIALIAS)
im_error = ImageTk.PhotoImage(file = "./ressources/images_gui/aw_snap.png")
im_error_label = Label(frame, image=im_error)
try:
if ....:
....unimportant code ....
else:
error_label.pack(in_=error_frame)
im_error_label.pack(in_=error_frame)
error_frame.pack(anchor="center")
except Exception as e:
error_label.pack(in_=error_frame)
im_error_label.pack(in_=error_frame)
error_frame.pack(anchor="center")
Packed image shows as blank
您遇到的最重要的一个问题是您的图像没有保存以供参考。如果您将 global im_error
添加到函数的最顶部,您的图像将可见。
也就是说您的代码存在一些问题,您应该更正。
第一:不要在函数中导入。而是将所有导入写在代码的顶部。
其次:我不确定你为什么要这样做.pack(in_=error_frame)
。这不是一个人真正需要的东西。只需确保您的标签已分配给正确的框架即可。 in_
参数很少使用,可能大多数人从未使用过它。我已经在这里工作两年了,这是我第一次看到有人使用这种论点。
第三:您还没有显示 Tkinter 的导入,但是根据您编写代码的方式,看起来您已经完成了:
import tkinter
from tkinter import *
这太过分了,不是个好主意。只需执行 import tkinter as tk
并确保在适用的地方使用 tk.
前缀。
这是您重写的代码:
import tkinter.ttk as ttk
import tkinter as tk
from PIL import ImageTk, Image
def show_toplevel_window():
global im_error
window_linkedin = tk.Toplevel(root)
window_linkedin.geometry('1000x590')
frame = tk.Frame(window_linkedin)
frame.pack()
error_frame = tk.Frame(frame, highlightbackground="green", highlightcolor="green", highlightthickness=1)
error_frame.pack()
error_label = tk.Label(frame, font=("Helvetica Neue", 20), text="It appears there are no results for the selected country")
error_label.pack()
im_error = Image.open("./ressources/images_gui/aw_snap.png")
im_error = im_error.resize((500, 500), Image.ANTIALIAS)
im_error = ImageTk.PhotoImage(file = "./ressources/images_gui/aw_snap.png")
im_error_label = tk.Label(error_frame, image=im_error)
im_error_label.pack()
root = tk.Tk()
show_toplevel_window()
root.mainloop()