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
}
Другие вопросы по тегам