In this video I’ll show you how to dynamically resize your background image whenever the app gets resized by a user.
In the last video I showed you how to add images as your background. In this video I’ll show you how to resize those images any time someone resizes the app. We’ll use the Pillow library to do this automatically using a Configure binding.
It’s actually pretty easy!
Python Code: image_bg_resize.py
(Github Code)
from tkinter import * from PIL import ImageTk, Image root = Tk() root.title('Codemy.com - Set Image as Background') root.iconbitmap('c:/gui/codemy.ico') root.geometry("800x500") # Define image bg = ImageTk.PhotoImage(file="images/mario.png") # Create a canvas my_canvas = Canvas(root, width=800, height=500) my_canvas.pack(fill="both", expand=True) # Set image in canvas my_canvas.create_image(0,0, image=bg, anchor="nw") # Add a label my_canvas.create_text(400, 250, text="Welcome!", font=("Helvetica", 50), fill="white") # add some buttons button1 = Button(root, text="Start") button2 = Button(root, text="Reset Scores") button3 = Button(root, text="Exit") button1_window = my_canvas.create_window(10, 10, anchor="nw", window=button1) button2_window = my_canvas.create_window(100, 10, anchor="nw", window=button2) button3_window = my_canvas.create_window(230, 10, anchor="nw", window=button3) def resizer(e): #global bg1, resized_bg, new_bg # Open our image bg1 = Image.open("images/mario.png") # Resize the image resized_bg = bg1.resize((e.width, e.height), Image.ANTIALIAS) # Define our image again new_bg = ImageTk.PhotoImage(resized_bg) # Add it back to the canvas my_canvas.create_image(0,0, image=new_bg, anchor="nw") # Readd the text my_canvas.create_text(400, 250, text="Welcome!", font=("Helvetica", 50), fill="white") ''' # Create a label my_label = Label(root, image=bg) my_label.place(x=0, y=0, relwidth=1, relheight=1) # Add something to the top of our image my_text = Label(root, text="Welcome!", font=("Helvetica", 50), fg="white", bg="#2a1863") my_text.pack(pady=50) # create a frame my_frame = Frame(root, bg='#6b88fe') my_frame.pack(pady=20) # Add some buttons my_button1 = Button(my_frame, text="Exit") my_button1.grid(row=0, column=0, padx=20) my_button2 = Button(my_frame, text="Start") my_button2.grid(row=0, column=1, padx=20) my_button3 = Button(my_frame, text="Reset") my_button3.grid(row=0, column=2, padx=20) ''' root.bind('', resizer) root.mainloop()
Add comment