Я пытаюсь написать программу в tkinter, где есть таблица меток, и когда вы нажимаете на метку, эта строка подсвечивается.
Мой код в настоящее время выглядит так для определения события нажатия и метки (dbf - это рамка, в которой они содержатся):
def callback(event):
event.widget.bg('blue')
for i in range(0,len(table_values)):
num_lab1 = tk.Label(dbf, text=table_values[i][0], width=10, justify='left', bg='white')
num_lab1.bind("<Button-1>", callback)
num_lab1.grid(row=i+1, column=0)
name_lab1 = tk.Label(dbf, text=table_values[i][1], width=20, justify='left', bg='white')
name_lab1.bind("<Button-1>", callback)
name_lab1.grid(row=i+1, column=1)
comm_lab1 = tk.Label(dbf, text=table_values[i][2], width=50, justify='left', bg='white', wraplength=250)
comm_lab1.bind("<Button-1>", callback)
comm_lab1.grid(row=i+1, column=2)
Однако, когда я щелкаю метку, она говорит мне: «Метка не имеет атрибута« bg »». Почему bg здесь не работает, но работает при определении метки?
Есть ли способ сделать то, что мне нужно, и щелкнуть строку, чтобы выделить ее?
(я знаю, что Прямо сейчас, если бы это сработало, это только выделило бы текущую метку. Я собирался выяснить, как выделить строку после того, как я это понял, но тут оказался в тупике.)
Любая помощь будет принята с благодарностью! Спасибо!
Редактировать: Исправлены строки .bind в коде (благодаря acw)
Редактировать2: Выяснили, как заставить весь ряд менять цвет. Размещаем каждый ряд в кадре, затем называем кадр и всех потомков кадра. Такое, что событие обратного вызова выглядело так:
def callback(event):
# Makes all rows white
for j in row_dict:
for k in row_dict[j].winfo_children():
k.configure(bg='white')
# Makes clicked row highlighted
for l in event.widget.master.winfo_children():
l.configure(bg='#a1c1ff')
Где row_dict - это словарь всех кадров (или строк). И тада! Выделение строки таблицы, по которой щелкнули!