Я пишу сценарий tcl для изменения цвета рамки на основе доступности лицензии. Если лицензия доступна, она покажет синий цвет еще красного цвета. Это выполняется периодически (и цвет рамки будет изменен в зависимости от доступности), используя tcl каждый proc.Изменение цвета рамки на основе проверки состояния
Но когда я попробовал пакет, забудьте перерисовать рамку. В последовательном цикле он говорит, что виджет уже существует. Я не могу использовать команду configure для цвета рамки, поскольку она не поддерживается. Пожалуйста, предложите решение.
#!/tools/tcl/tcl8.6/bin/tclsh -f
package require Tk
proc checkLic {} {
set val [exec lmstat -a -c /tools/license/dat/cadence_orbit_3x.dat -f Liberate_MX_Client | grep issued | awk {{print $11}}]
puts $val
if {$val == 0} {
after 1000
pack forget .high
after 1000
frame .high -width 8 -height 30 -background blue
pack .high -side right
} else {
after 1000
pack forget .high
after 1000
frame .high -width 8 -height 30 -background red
pack .high -side right
}
}
proc every {ms body} {
eval $body
after $ms [info level 0]
}
every 1000 {checkLic}
пакет забыть не разрушает виджет, он просто удаляет его из окна. Вы можете забыть и повторно управлять одним и тем же виджета несколько раз. –
Почему вы ставите прямой «после 1000» внутри обратного вызова? –
Я обновил свой ответ, чтобы надеяться, что проблема будет лучше. –