Команда представляет собой скрипт, который оценивается во время обратного вызова. Ваш код устанавливает для команды обратного вызова для пункта меню «Открыть» значение [list myputs "Open"]
, которое при вводе в оболочке выдаст то же сообщение об ошибке.
Использование [list]
в таких обратных вызовах виджетов часто является хорошей практикой, поскольку избавляет вас от необходимости выполнять все виды обратной косой черты в простой строке. Но здесь это не обязательно. myargs может быть просто
....
File {
"Open ..." { myputs "Open" }
"New ..." { myputs "New" }
....
Если вы хотите, чтобы команда включала в себя некоторую переменную, которая должна быть развернута, или команда была запущена, то в какой-то момент вам нужно выполнить это расширение, в нужное время и в правильной области. Например, если ваше определение меню было что-то вроде
File {
"Open ..." { myputs [getString Open] }
"New ..." { myputs [getString New] }
}
где getString
- некоторая команда для возврата строки, тогда вы можете добавить в меню строку добавления
$mdropoff add command -label $label -command [uplevel #0 subst $command]
Особенности того, как вы это сделаете, зависят от того, какие переменные вы хотите передать (локальные, пространственные или глобальные) или когда они должны быть расширены (хотите ли вы, чтобы они были расширены во время определения вашего меню или когда он вызывается?)