Событие Tkinter Click выделяет метку, на которую нажали? - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь написать программу в 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 - это словарь всех кадров (или строк). И тада! Выделение строки таблицы, по которой щелкнули!

1 Ответ

1 голос
/ 15 апреля 2020

Измените вашу callback() функцию следующим образом:

def callback(event):
    event.widget.config(bg='blue')

Надеюсь, это поможет. :)

...