Ярлык не показывает изображение в качестве фона в 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', bd=0, 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, такие как ярлыки, кнопки и т. Д., Поверх фонового изображения. Помощь будет оценена !!
EDIT:Это то , что происходит , когда я удалить
height
и
width
атрибуты из метки. Как заставить изображение закрывать
y-axis
а также вместо того, чтобы просто покрывать
x-axis
. И он также съедает Рамку наверху. Как все это исправить?
2 ответа
Пока изображение является файлом png, вы можете продолжать использовать, иначе используйте
PIL.ImageTk.PhotoImage
. И
tk.PhotoImage
не принимает
PIL
image как их файл, вы должны сказать:
bg = PhotoImage(file=r'image-from-rawpixel-id-2023082-png.png')
... и вы не установили
image
вариант к этикетке:
window = Label(root, image=bg, bd=0, height=70, width=50)
РЕДАКТИРОВАТЬ: Чтобы получить фактический размер изображения, удалите
height
и
width
этикетки:
window = Label(root, image=bg, bd=0)
Вы можете разместить виджеты над этим ярлыком, используя
place(x=n,y=m)
геометрический менеджер.
Необходимо внести несколько изменений
Экземпляр
PIL.Image.open
нельзя использовать сtkinter
по умолчаниюPhotoImage
, вам нужно будет использоватьPIL.ImageTk.PhotoImage
вместо.from PIL import Image,ImageTk im = Image.open(r'sample.png') bg = ImageTk.PhotoImage(im)
Вам нужно будет указать
image
параметр метки, вот такwindow = Label(root, bd=0, height=70, width=50,image=bg)