Reputation: 25
from tkinter import *
from tkinter.filedialog import askopenfilename
from PIL import Image, ImageTk
# GLOBAL VARIABLES
# INITIALIZE WINDOW
home_window = Tk()
# INITIALIZE IMAGE BUTTON COUNT VARIABLE
add_images_button_count = 0
# INITIALIZE X AND Y POSITION FOR IMAGE PLACEMENT
x = 0
y = 0
# INITIALIZE MAX IMAGE COUNT VARIABLE
max_image = []
# CREATE CANVAS
canvas = Canvas(home_window, width=600, height=400, bg="white")
canvas.place(rely=0.1)
# HOME SCREEN
def home_screen():
# REFERENCE GLOBAL WINDOW
global home_window
# SPECIFY WINDOW SIZE
home_window.geometry("600x450")
# CREATES TOP FRAME AND DOESN'T ALLOW WINDOW SHRINKAGE
header_frame = Frame(home_window, width=600, height=50, bd=5, bg="grey")
header_frame.grid(row=0)
# BUTTONS
close_app = Button(header_frame, text="Close App", bg="white", fg="blue", command=home_window.destroy)
close_app.place(relx=0.015, rely=0.2, anchor="nw")
back = Button(header_frame, text="Back", bg="white", fg="blue")
back.place(relx=0.15, rely=0.2, anchor="nw")
add_images = Button(header_frame, text="Add Images", bg="white", fg="blue", command=add)
add_images.place(relx=0.45, rely=0.2, anchor="n")
clear = Button(header_frame, text="Clear", bg="white", fg="blue", command=clear_canvas)
clear.place(relx=0.55, rely=0.2, anchor="n")
next_step = Button(header_frame, text="Next Step", bg="blue", fg="white")
next_step.place(relx=0.985, rely=0.2, anchor="ne")
# RUN A NON RESIZEABLE TKINTER WINDOW
home_window.resizable(False, False)
home_window.mainloop()
# MAX IMAGE WARNING
def max_image_warning():
global home_window
pop = Toplevel(home_window)
pop.geometry("300x200")
pop.title("Warning")
Label(pop, text="Max amount of images reached!").pack(pady=20)
Button(pop, text="Understood", command=pop.destroy).pack(pady=40)
# ADD IMAGES
def add():
# BUTTON COUNTER
global home_window, canvas, add_images_button_count, x, y, max_image
# SPECIFY FILE TYPES
filetypes = [('JPG Files', '*.jpg'), ('PNG Files', '*.png')]
# OPEN FILE EXPLORER AND ALLOW USER TO SELECT PHOTO
filename = askopenfilename(multiple=True, filetypes=filetypes)
# APPEND NEW FILE TO MAX IMAGE COUNTER
max_image.append(filename)
# CHECK IF MAX IMAGE AMOUNT OF 6 IS REACHED, INFORM USER
if len(max_image) > 6:
max_image_warning()
return
# FIRST CLICK
if add_images_button_count == 0:
# START POSITION FOR IMAGE
x = 0.1
y = 0.25
# INCREMENT BUTTON COUNTER
add_images_button_count += 1
# NOT FIRST CLICK
else:
# IMAGE POSITIONING LOGIC
# START NEW ROW AFTER THIRD COLUMN
if x == 0.7:
x = 0.1
y = 0.6
# ELSE CONTINUE TO INCREMENT COLUMN
else:
x += 0.3
# MULTIPLE IMAGES METHOD
for f in filename:
# OPEN AS IMAGE
img = Image.open(f)
# RESIZE IMAGE
img_resized = img.resize((100, 100))
# TK PHOTO
img = ImageTk.PhotoImage(img_resized)
# CREATE LABEL TO DISPLAY IMAGE
panel = Label(canvas)
# IMAGE POSITION
panel.place(relx=x, rely=y)
# ASSIGN IMAGE TO LABEL DIRECTLY
panel.image = img
# GARBAGE COLLECTION
panel['image'] = img
# CLEAR
def clear_canvas():
# REFERENCE GLOBAL VARIABLE
global canvas, add_images_button_count
# CLEAR IMAGES
canvas.delete("all")
# RESET BUTTON COUNTER TO ZERO
add_images_button_count = 0
# add_text = tk.Button(window, text="Add Text")
# add_text.grid(row=2, column=2, padx=5, pady=5)
#
# add_logo = tk.Button(window, text="Add Logo")
# add_logo.grid(row=2, column=3, padx=5, pady=5)
#
# undo = tk.Button(window, text="Undo")
# undo.grid(row=2, column=4, padx=5, pady=5)
# RUN HOME SCREEN
home_screen()
Upvotes: 0
Views: 859
Reputation: 385970
canvas.delete("all")
only deletes canvas objects -- lines, circles, images, etc that were created with the canvas create
methods. You're not using those methods so these images are not canvas objects.
Since you are making the labels children of the canvas, you can iterate over the results of canvas.winfo_children()
to destroy the windows:
for child in canvas.winfo_children():
child.destroy()
Upvotes: 1