Skip to content Skip to sidebar Skip to footer

Adding A Background Image To A Root Window And Placing Labels On The Top Of The Background Image

I'm trying to add a background image to my root window but it doesn't seem to be working for me. This is my code. I would like the background image to cover the whole window and pl

Solution 1:

You can use place to use an image as a background for other widgets. place doesn't affect the geometry of other widgets so you can use it with grid or pack.

The main think to keep in mind is that you should do this before creating other widgets so that it is lowest in the stacking order. That, or be sure to call lower on it, otherwise it will overlay the other widgets rather than underlay them.

With your code, just remove background.pack() and replace it with these two lines:

background.place(relx=.5, rely=.5, anchor="center")
background.lower()

You don't need to change anything else. The above centers the image. If you instead want the image to start in the upper-left corner you can do it like this:

background.place(x=0, y=0, anchor="nw")

Solution 2:

You have to use background as parent for widgets to put them inside Label with background.

I remove Frame to make it simpler. And now I can use weight to automatically resize empty rows and columns around widgets so they will be in the center.

import tkinter as tk

top = tk.Tk()
top.geometry('250x250')

img = tk.PhotoImage(file="hal_9000.gif")
img = img.subsample(1, 1)

background = tk.Label(top, image=img, bd=0)
background.pack(fill='both', expand=True)
background.image = img

# resize emptyrows, columns to put other elements in center
background.rowconfigure(0, weight=100)
background.rowconfigure(3, weight=100)
background.columnconfigure(0, weight=100)
background.columnconfigure(3, weight=100)

name_label = tk.Label(background, text="Username")
name_label.grid(row=1, column=1, sticky='news')

name_entry = tk.Entry(background)## the Entry will let the user entre text inside the text box
name_entry.grid(row=1, column=2)

password_label = tk.Label(background, text="Password")
password_label.grid(row=2, column=1, sticky='news')

password_entry = tk.Entry(background, show="*")
password_entry.grid(row=2, column=2)

top.mainloop()

Result:

enter image description here

As you see widgets have gray background which you can't remove. If you need text without gray background then you have to use Canvas with create_text() (and create_window() to put Entry)


Gif file (with HAL 9000) to test code:

enter image description here

Post a Comment for "Adding A Background Image To A Root Window And Placing Labels On The Top Of The Background Image"