Как установить фоновое изображение в tkinter, используя только сетку - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь установить фоновое изображение для своего окна tkinter, однако я не совсем знаю, как изменить его размер, чтобы он соответствовал размерам окна. Я поискал в Интернете, и все учебники / ответы используют pack (для расширения и заполнения), но я не могу использовать pack, потому что у меня есть куча других кнопок / меток, которые все используют сетку (это минимальный работоспособный пример, мой фактический сценарий намного больше, с большим количеством кнопок / большего размера). Есть ли способ сделать это с помощью сетки?

Это моя текущая настройка:

import tkinter as tk
from PIL import ImageTk, Image

root = tk.Tk()
background_image = ImageTk.PhotoImage(Image.open("pretty.jpg"))
l=tk.Label(image=background_image)
l.grid()

tk.Label(root, text="Some File").grid(row=0)
e1 = tk.Entry(root)
e1.grid(row=0, column=1)


tk.mainloop()

1 Ответ

2 голосов
/ 17 июня 2020

Вы можете использовать place(x=0, y=0, relwidth=1, relheight=1) для размещения метки фонового изображения. Чтобы подогнать изображение под размер окна, вам необходимо изменить размер изображения при изменении размера метки.

Ниже приведен пример, основанный на вашем коде:

import tkinter as tk
from PIL import Image, ImageTk

def on_resize(event):
    # resize the background image to the size of label
    image = bgimg.resize((event.width, event.height), Image.ANTIALIAS)
    # update the image of the label
    l.image = ImageTk.PhotoImage(image)
    l.config(image=l.image)

root = tk.Tk()
root.geometry('800x600')

bgimg = Image.open('pretty.jpg') # load the background image
l = tk.Label(root)
l.place(x=0, y=0, relwidth=1, relheight=1) # make label l to fit the parent window always
l.bind('<Configure>', on_resize) # on_resize will be executed whenever label l is resized

tk.Label(root, text='Some File').grid(row=0)
e1 = tk.Entry(root)
e1.grid(row=0, column=1)

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...