TCL - неверное имя команды... но другое
Я пытаюсь для удобства добавить в окно консоли две кнопки и поиграться с этим. Проблема в том, что первая кнопка просто вызывает «выход». Это работает нормально. Вторая кнопка запускает «LogPuts», который должен дополнительно записывать все «путы» в файл. Это кнопка переключения. И это дает мне «недопустимое имя команды LogPuts»
Сам код работает, перед созданием кнопки написана процедура LogPuts . Вот пример:
proc LogPuts { } { ;#.... do s.th. }
console eval {
place [button .console.bExit -text "Exit" -command "exit"] -relx 0.93 -rely 0.0 -
width 62 -height 25
place [button .console.bLog -text "LogPuts" -command "LogPuts"] ] -relx 0.93 -rely
0.06 - width 62 -height 25
}
Я даже пытался поиграть с верхним уровнем 0 при вызове нажатия кнопки, чтобы процедура была замечена на «верхнем уровне», но, поскольку у меня не было опыта работы с ней, результат был ожидаемым; это не помогло :)
Есть ли у кого-нибудь идеи, как решить эту проблему? Как я могу вызвать код кнопки на уровне консоли?
1 ответ
Согласно документации https://www.tcl-lang.org/man/tcl8.6/TkCmd/console.htm#M5 . console eval
использует отдельный интерпретатор, отличный от того, который используется для запуска обычных команд. Проблема здесь в том, что вы определяетеLogPuts
в обычном интерпретаторе, но пытаюсь использовать его из консольного интерпретатора. Должно работать следующее:
console eval {
proc LogPuts { } { ;#.... do s.th. }
place [button .console.bExit -text "Exit" -command "exit"] -relx 0.93 -rely 0.0 -
width 62 -height 25
place [button .console.bLog -text "LogPuts" -command "LogPuts"] ] -relx 0.93 -rely
0.06 - width 62 -height 25
}