Ярлык не показывает изображение в качестве фона в 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)
    
Другие вопросы по тегам