Автоматическое отображение подполя TCL в метке TK - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть переменная и метка, которая показывает содержимое переменной.И он меняется каждый раз, когда переменная имеет новое значение:

global MyVariable
label .mylabel -textvariable MyVariable

Это работает.

Теперь проблема в том, что MyVariable не содержит значение, которое я хочу показать, но это список значений, и я хочу выполнить некоторый код, который извлекает подполе, которое фактически содержит данные, которые должны бытьотображается.Есть ли простой способ вставить некоторую логику в эту метку, чтобы выполнить предварительную обработку измененного содержимого переменной до его отображения?

1 Ответ

0 голосов
/ 21 февраля 2019

Метки могут просматривать только целые переменные, будь то скалярные или элементы (ассоциативного) массива.У них нет ничего для поиска внутри списка, словаря или другой структуры.Но вы можете смоделировать то, что вы хотите, с помощью трассировки.

trace add variable x write [list apply {args {
    global x x_1
    set x_1 [lindex $x 1]
}}]
set x [list a b c d e]
label .x1 -textvariable x_1
pack .x1

# Some time later...
lset x 1 fruitbat

# A different type of update
set x "the quick brown fox"

Вы можете добавлять произвольно сложные вычисления в трассировку, но на практике очень полезно сделать их довольно быстрыми, чтобы ваш графический интерфейс чувствовал себя отзывчивым.Хотя чтение из файла или базы данных может быть достаточно быстрым (в некоторых случаях), так что не стесняйтесь ...

...