Как удалить ярлык после некоторого события в tkinter - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть приложение, в котором изображения (созданные с помощью Label (root, image = 'my_image)) изменяются при возникновении какого-либо события. Кнопки не используются. У одного из моих изображений есть метка с текстом над изображением. Так и происходит, где я этого хочу. Но когда я перехожу к следующему изображению после этого, оно все еще там, и я не хочу этого. Что я могу сделать? Я пытался уничтожить () текстовую метку, но он говорит, что переменная используется перед присваиванием. Вот часть, где я вставляю текстовую метку. Переменная panel2 не работает вне блока, поэтому я не могу ее уничтожить:

if common.dynamic_data:
        to_be_displayed = common.dynamic_data
        panel2 = tk.Label(root, text = to_be_displayed, font=("Arial 70 bold"), fg="white", bg="#9A70D4")
        panel2.place(x=520,y=220)

1 Ответ

0 голосов
/ 07 апреля 2020

Вы можете сделать это на холсте. Поместите метку на холст и используйте функции bind для событий Enter и Leave:

# imports
import tkinter as tk

# creating master
master = tk.Tk()

# hover functions
def motion_enter(event):
    my_label.configure(fg='green')
    print('mouse entered the canvas')

def motion_leave(event):
    my_label.configure(fg='grey')
    print('mouse left the canvas')

# create canvas, on which if you hover something happens
canvas = tk.Canvas(master, width=100, height=100, background='grey')
canvas.pack(expand=1, fill=tk.BOTH)

# create label
my_label = tk.Label(canvas, text='Toggle text is here!', fg='grey')
my_label.pack()

# binding enter and leave functions
master.bind('<Enter>', motion_enter)
master.bind('<Leave>', motion_leave)

# set window size
master.geometry('400x200')

# start main loop
master.mainloop()

Вы можете изменить конфигурацию любых объектов при наведении курсора на холст или что-либо еще в созданных функциях. Играйте с объектами и кодом, чтобы делать все, что вы хотите.

Также, как уже упоминалось, вы можете хранить свои ярлыки или другие объекты в списке или словаре для изменения отдельных объектов, например:

# imports
import tkinter as tk

# creating master
master = tk.Tk()

d = {}

# hover functions
def motion_enter(event):
    d['first'].configure(fg='green')
    print('mouse entered the canvas')

def motion_leave(event):
    d['first'].configure(fg='grey')
    print('mouse left the canvas')

# create canvas, on which if you hover something happens
canvas = tk.Canvas(master, width=100, height=100, background='grey')
canvas.pack(expand=1, fill=tk.BOTH)

# create label
my_label = tk.Label(canvas, text='Toggle text is here!', fg='grey')
my_label.pack()
d['first'] = my_label
my_label = tk.Label(canvas, text='Toggle text is here!', fg='grey')
my_label.pack()
d['second'] = my_label

# binding enter and leave functions
master.bind('<Enter>', motion_enter)
master.bind('<Leave>', motion_leave)

# set window size
master.geometry('400x200')

# start main loop
master.mainloop()

РЕДАКТИРОВАТЬ 1

Если вы хотите удалить ярлык, когда мышь покинула холст, вы можете написать такие функции:

def motion_enter(event):
    d['first'].pack()
    d['second'].pack()
    print('mouse entered the canvas')

def motion_leave(event):
    d['first'].pack_forget()
    d['second'].pack_forget()
    print('mouse left the canvas')

или просто добавить 2 строки в предыдущем объединить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...