#tcl #tk
#tcl #tk
Вопрос:
У меня есть скрипты, которые использовались без Tk. Когда я добавил Tk, одна строка обрабатывается как путь к окну, и я не понимаю, почему.
Информация об ошибке выглядит так: bad window path name "* Log directory: D:/tests/log/2016_10_13_17_30_29"
Это происходит, когда выполняется эта строка:
message "* Log directory: ${dirname}"
dirname
разрешается как путь к каталогу, например:
D:/tests/log/2016_10_13_17_30_29
message
это простая процедура для входа в файл:
proc message {text} {
global test_log_filename
puts -nonewline $test_log_filename "[timestamp] "
puts $test_log_filename $text
}
Когда я не использую Tk, он работает правильно. Насколько я понимаю, он принимает message
аргумент процедуры как путь к окну Tk, но я не знаю почему. Конечно, такого окна не существует.
Я также попытался вызвать что-то вроде message test
, чтобы подтвердить, что это проблема аргумента. Выдает ошибку bad window path name "test"
Не могли бы вы помочь с этим?
Ответ №1:
Tk также определяет вызываемую команду message
(это виджет, похожий на a label
, но с несколько другим алгоритмом переноса слов; это не рекомендуется для нового кода), и по какой-то причине это выигрывает. Хотя вы, вероятно, могли бы заставить использовать свой вместо этого, напрямую source
вводя свой код после package require Tk
, это вряд ли будет хорошей идеей, поскольку из-за этого вы можете обнаружить некоторые другие нарушения кода. (Я не могу вспомнить, используется ли оно в настоящее время в стандартных диалоговых окнах, но это то, что может пойти не так.)
Проще всего изменить имя вашей процедуры ведения журнала. Возможно, к Message
(с заглавной буквы). Это не должно занять много времени, поскольку фактически это не намного больше, чем глобальный поиск и замена.