自动显示TK标签中的TCL子字段

时间:2019-02-21 12:56:31

标签: tcl tk

我有一个变量和一个显示变量内容的标签。并且每次变量具有新值时都会更改:

global MyVariable
label .mylabel -textvariable MyVariable

那行得通。

现在的问题是MyVariable不包含我要显示的值,但它是一个值列表,我想执行一些代码以提取实际包含要显示数据的子字段。是否有一种简单的方法将一些粘合逻辑放入该标签中,以便在更改后的变量内容显示之前对其进行预处理?

2 个答案:

答案 0 :(得分:2)

标签只能监视整个变量,无论是标量还是(关联)数组的元素。他们没有任何内容可以查看列表,字典或其他结构。但是您可以通过跟踪来模拟所需的内容。

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"

您可以将任意复杂的计算放入跟踪中,但是在实践中让它们相当快是一个非常不错的主意,以便您的GUI能够响应。实际上,从文件或数据库中读取数据可能足够快(在某些情况下),因此不要太受约束……

答案 1 :(得分:0)

好的,现在我了解Donals的回答以及使用它的问题,我想分享我的解决方案

    upvar $tmVar tracedVariable
    trace variable tracedVariable w {apply {{nameOfTraceVar v2 op} {
        upvar $nameOfTraceVar localAccess
        .mode.tl_$nameOfTraceVar configure -text [getengvalue $localAccess]
    }}}

    label  ".mode.tl_$tmVar" -text "-"

所有这些都是过程的一部分,该过程为名为tmVar的变量创建标签,并被多次调用。现在,lambda将派生值直接写入标签。