为了账号安全,请及时绑定邮箱和手机立即绑定

在Tkinter中将其用作背景时未显示图像

在Tkinter中将其用作背景时未显示图像

潇湘沐 2022-08-11 17:51:21
呵呵!我正在尝试在Tkinter中创建的GUI中使用图像作为背景。它可以在此项目中的不同帧上使用相同的代码,但它不希望在不同的帧中工作。我没有收到任何错误,框架只是空白。感谢您的帮助!在这里,我可以很好地使用图片作为背景:def main_screen():global screenscreen = Tk()screen.geometry("600x750")screen.configure(background="#022140")screen.title("Hermes")filename = PhotoImage(file="background.png")filename_small = filename.subsample(2, 2)background_label = Label(image=filename_small)background_label.place(x=1, y=1, relwidth=1, relheight=1)login_button = Button(text="Login", bg="#022140", height="2", width="30", command=login,                      highlightbackground='#494B68')screen.mainloop()但在这里它不起作用:def login_sucess():    global screen3    screen3 = Toplevel(screen)    screen3.geometry("500x400")    filename = PhotoImage(file="main_theme.png")    filename_small = filename.subsample(2, 2)    background_label = Label(screen3, image=filename_small)    background_label.place()感谢您的帮助!
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

它应该非常简单。当您在 tkinter 中处理图像时,您始终需要在使用该图像的小部件上设置对该图像的引用。换句话说,执行如下操作:


from tkinter import Tk,Label,PhotoImage


root = Tk()

img = PhotoImage(file='background.png')

small_img=img.subsample(2, 2)

background_label = Label(root, image=small_img)

background_label.img=img

background_label.place(x=0, y=0, relheight=1, relwidth=1)

root.mainloop()

特别是当您创建将图像保存在函数范围或类似内容中的 Label 时,设置该引用非常重要,因为在函数调用结束后,指向该 Labels 实例的变量将消失。


PS:为了更清楚地了解主小部件,并且对于小部件的小性能改进,在初始化时始终会给小部件一个主小部件。我知道tkinter还会自动将最后创建的Tk实例分配为主实例本身,但是a)是否需要不必要的计算能力,b)是否更容易跟踪哪个小部件是另一个小部件的子级等等。;)


查看完整回答
反对 回复 2022-08-11
  • 1 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信