Как создать уникальные имена для оконных путей Tk toplevel? - PullRequest
1 голос
/ 14 января 2012

Мне нужен способ для генерации неиспользуемого имени для путей окон Tk toplevel, как это делает #auto для объектов Itcl.

Как я могу это сделать?Может быть, у Тк есть подобная утилита?

Ответы [ 2 ]

1 голос
/ 16 января 2012

Когда мне нужны уникальные имена виджетов, я использую что-то вроде этого:

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
1 голос
/ 14 января 2012

Вероятно, есть какой-то более причудливый способ сделать это, но в моем случае, когда мне нужны уникальные имена, я просто составляю одноразовые данные, что-то вроде

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

и т. Д. И т. Д.с различными возможностями форматирования.

Это не элегантно, но у меня оно работает над моими вещами, и это полезно, даже если вам нужно следить за ними.

...