Как перебрать список меток в TKinter - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь создать сетку меток 18 на 18 и заставить каждую метку иметь события Enter и Leave. Но когда я пишу код, он создает событие только для последней метки в сетке. Что я не получаю здесь?

ps Извините, если код грязный, я только 1 месяц на изучение Python

from tkinter import *
import string


root = Tk()


sequence_lst = list(string.ascii_letters)
execute = 0
num = 2

while execute < 3:
    for i in range(len(sequence_lst)):
        sequence_lst.append(sequence_lst[i]*num)
    execute += 1
    num += 1
sequence_lst = sequence_lst[:324]



position_x = 0
position_y = 0
square_lst = []
while position_x < 18:
    for i in range(18):
        if position_y < 18:
            square = Label(root, width=2, borderwidth=1, relief='solid')
            square.grid(row=position_x, column=position_y)
            position_y += 1
            square_lst.append(square)
        else:
            position_y = 0
            position_x += 1


for sequence in sequence_lst:
    sequence = square_lst[sequence_lst.index(sequence)]
    sequence.bind('<Enter>', lambda event: sequence.configure(bg='blue'))
    sequence.bind('<Leave>', lambda event: sequence.configure(bg='white'))        


root.mainloop()

1 Ответ

0 голосов
/ 24 марта 2020

Измените свои привязки, чтобы они ссылались на виджет, связанный с событием, используя event.widget:

sequence.bind('<Enter>', lambda event: event.widget.configure(bg='blue'))
sequence.bind('<Leave>', lambda event: event.widget.configure(bg='white'))  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...