Tcl / Tk абсолютно простой пример Hello World завершается неудачно - неверное имя команды "button" - PullRequest
1 голос
/ 09 мая 2019

Я пытался следовать учебным пособиям / фрагментам кода на странице wiki Tcl lang .

  • Но, к сожалению, неважно, если я напишу следующий код в текстовом файле hello_world.tcl , как показано ниже:
#! /usr/local/bin/wish
button .hello -text "Hello, World!" -command { exit }
pack .hello

выдает следующую ошибку:

$ tclsh hello_world.tcl
неверное имя команды "кнопка"
при выполнении
"button .hello -text" Hello, World! "-команда {выход}"
(файл "hello_world.tcl" строка 4)


  • Или, если я запускаю tkcon и повторяю то же самое, я получаю это уведомление:

enter image description here

и после нажатия повторить попытку я получаю это:

enter image description here

это не то, что я хочу.

Мне просто нужна была простая кнопка с надписью «Hello World», которая при нажатии на нее закрывала бы окно, которое запускалось при выполнении скрипта / команды.

Погуглив термин «Загрузить Tk в Tcl» или что-то подобное, ничего полезного не принесло.

Как получить рабочий пример в обоих случаях?

Ответы [ 2 ]

3 голосов
/ 09 мая 2019

Похоже, что файлы Tcl были настроены для запуска tclsh (который по умолчанию не загружает пакет Tk), а не wish (который загружает Tk).Самое простое решение - явно загрузить его в начале вашего скрипта с:

package require Tk

во всех случаях;тогда вы либо будете работать так, как вы ожидаете, либо вы получите явный сбой, который говорит, что Tk не может быть загружен (вместо более загадочного сообщения о том, что нет команды button).


Канонически, рекомендуемый способ сделать это будет:

#! /usr/bin/env wish

package require Tk

button .hello -text "Hello, World!" -command { exit }
pack .hello

, поскольку это позволяет найти wish на пути, а не жестко закодировано в определенном месте.

2 голосов
/ 09 мая 2019

Сначала нужно загрузить Tk, другими словами:

#! /usr/local/bin/wish
package require Tk      ;# This line

button .hello -text "Hello, World!" -command { exit }
pack .hello
...