标签未将图片显示为 Tkinter 中的背景

问题描述

#importing everything
from tkinter import *
from PIL import Image

#making the root window
root = Tk()

dimension = '800x500'
#setting the window
im = Image.open(r'C:\Users\Hunter\Desktop\school 1\module\pbm\bg.png')
bg = PhotoImage(im)
window = Label(root,bd=0,height=70,width=50)
window.image=bg
window.pack(fill=Y,expand=True,side=BottOM)

#overriding the default properties
root.overrideredirect(True)

root.geometry(dimension)


#the main title bar
title_bar = Frame(root,bg='#496E82',height=4)


#pack all the widgets
title_bar.pack(fill=X,side=TOP)



#code for moving the window
def get_pos(event):
    xwin = root.winfo_x()
    ywin = root.winfo_y()
    startx = event.x_root
    starty = event.y_root

    ywin = ywin - starty
    xwin = xwin - startx
    def move_window(event):
        root.geometry(dimension + '+{0}+{1}'.format(event.x_root + xwin,event.y_root + ywin))
    startx = event.x_root
    starty = event.y_root
    title_bar.bind('<B1-Motion>',move_window)


#binding the title bar so that it moves
title_bar.bind('<Button-1>',get_pos)


#main thing
root.mainloop()

当我运行上面的代码时,它隐藏了所有东西,它唯一显示的是一个白色窗口,没有别的。它还隐藏了顶部的框架(标题栏)。但是当我为标签设置背景颜色时,它也会隐藏所有内容,框架和所有内容,并显示该颜色的窗口。我想做的事情是向我的应用程序添加背景图片,然后在背景图片的顶部添加其他 tkinter 小部件,如标签、按钮等。帮助将不胜感激!

编辑: This 是我从标签删除 heightwidth 属性时发生的情况。如何使图像也覆盖 y-axis,而不仅仅是覆盖 x-axis。它还会吞噬顶部的框架。如何解决所有这些问题?

解决方法

只要图片是png文件,就可以继续使用tk.PhotoImage,否则使用PIL.ImageTk.PhotoImage。并且 tk.PhotoImage 不接受 PIL 图像对象作为其文件,您应该说:

bg = PhotoImage(file=r'image-from-rawpixel-id-2023082-png.png')

...并且您还没有为标签设置 image 选项:

window = Label(root,image=bg,bd=0,height=70,width=50)

编辑:要获取图像的实际大小,请移除标签的 heightwidth

window = Label(root,bd=0)

您可以使用 place(x=n,y=m) 几何管理器将小部件置于此标签上方。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...