Home > database >  How do I delete the Label I click on?
How do I delete the Label I click on?

Time:06-01

I have been working on a project where I use labels that I want to disappear on click, but it only deletes the last label that was created. Here's my code:

from tkinter import *
import tkinter
import random
from PIL import Image, ImageTk

from functools import partial
width1=1280
height1=720
canvas = tkinter.Canvas(width=width1,height=height1, bg = 'white')
canvas.pack()

def clicked(*args):
    label.destroy()

def square():
    global label
    global img
    sq_time = random.randrange(4000,6000)
    x = random.randrange(100,width1-40,40)
    y = random.randrange(40,height1-40,40)
    label = Label(canvas, image = img)
    label.place(x = x , y = y)
    label.bind("<Button-1>",partial(clicked))
    canvas.after(sq_time, square)
img  = ImageTk.PhotoImage(Image.open('froggy.png'))
square()
mainloop()

froggy.png is a image that I have saved in the same folder as the code. Can someone tell me how do I delete the label that was clicked?

CodePudding user response:

def on_click():
    label.after(1000, label.destroy())


Button(win, text="Delete", command=on_click).pack()

CodePudding user response:

In tkinter event handler function are automatically passed an event argument that, among other things, identifies the widget that triggered them. This means you can use that instead of creating a partial to get the information needed.

from tkinter import *
import tkinter
import random
from PIL import Image, ImageTk

width1 = 1280
height1 = 720
canvas = tkinter.Canvas(width=width1, height=height1, bg='white')
canvas.pack()

def clicked(event):
    event.widget.destroy()

def square():
    global label
    global img
    sq_time = random.randrange(4000, 6000)
    x = random.randrange(100, width1-40, 40)
    y = random.randrange(40, height1-40, 40)
    label = Label(canvas, image = img)
    label.place(x=x, y=y)
    label.bind("<Button-1>", clicked)
    canvas.after(sq_time, square)

img = ImageTk.PhotoImage(Image.open('froggy.png'))
square()
mainloop()
  • Related