如何追踪变量?

时间:2017-08-28 03:36:29

标签: tcl tk

点击更新按钮后,alist会更新,如何获取更新值并可以在组合框中选择?非常感谢!

namespace eval PreGen {
    set alist {sec1 sec2 sec3 sec4}
    proc SetUp {} {
        ttk::combobox .c -values $PreGen::alist
        button .b -text update -command PreGen::Update
        grid ...
    }
    proc Update {} {
        ...
        set PreGen::alist {op1 op2 op3 ...} #the list value got from other file
        ...
    }
} 

1 个答案:

答案 0 :(得分:0)

您可以轻松添加跟踪。最简单的帮助程序实现跟踪回调,但您可以使用apply术语;这也会起作用,但代码更不透明,因为它在一条线上更加疯狂。这是程序版本:

namespace eval PreGen {
    # ALWAYS use [variable] to set default values for variables
    variable alist {sec1 sec2 sec3 sec4}

    proc SetUp {} {
        variable alist
        ttk::combobox .c -values $alist
        trace add variable alist write ::PreGen::AlistUpdated
        # Could use [namespace code] to generate the callback:
        #   trace add variable alist write [namespace code AlistUpdated]
        # but that feels like overkill in this case
        button .b -text update -command PreGen::Update
        grid ...
    }

    proc AlistUpdated {args} {
        # We just ignore the arguments; don't need them here
        variable alist
        .c configure -values $alist
    }

    proc Update ...
}

当然,如果您只在该命名空间的过程中设置变量,则可以直接在正确的时间调用.c configure -values。这就是我实际建议您做的事情。