如何为Tk顶层窗口路径生成唯一名称?

时间:2012-01-13 21:55:00

标签: user-interface tcl tk incr-tcl

我需要一种为Tk顶层窗口路径生成未使用名称的方法,就像#auto为Itcl对象做的那样。

我该怎么做?也许Tk有类似的效用?

2 个答案:

答案 0 :(得分:1)

可能有一些更好的方式来做,但在我的情况下,当我需要唯一的名称时,我只是编写一个时间数据,如

set systemTime [clock seconds];
set myname [concat [clock format $systemTime -format %H%M%S] ".myext"]

等等。有许多不同的格式化可能性。

它并不优雅,但是我对它的工作很有用,而且如果你需要对它们保持一定的跟踪它也很有用。

答案 1 :(得分:1)

当我需要唯一的小部件名称时,我会使用以下内容:

variable sequencecounter 0;   # Don't touch outside this code!
proc unique {{parent ""}} {
    variable sequencecounter
    while {[winfo exists [set w $parent.w$sequencecounter]]} {
        incr sequencecounter
    }
    return $w
}

保证返回不存在的窗口小部件名称。 (Tk保证运行单线程,所以你知道没有讨厌的竞争条件。)像这样使用它:

set top [toplevel [unique]]
set btn [button [unique $top] -text "Hi" -command { exit }]
pack $btn