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

Time:06-07

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:

In tkinter event handler functions are automatically passed an event object argument that, among other things, has an attribute that 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()

CodePudding user response:

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


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