Учебники

Tcl-Tk — Краткое руководство

Tcl — Обзор

Tcl — это сокращенная форма Tool Command Language . Джон Оустерхаут из Калифорнийского университета в Беркли разработал его. Это комбинация языка сценариев и его собственного интерпретатора, который внедряется в приложение, которое мы разрабатываем вместе с ним.

Tcl был разработан изначально для Unix. Затем он был портирован на Windows, DOS, OS / 2 и Mac OSX. Tcl очень похож на другие языки оболочки Unix, такие как Bourne Shell (Sh), C Shell (csh), Korn Shell (sh) и Perl.

Он направлен на предоставление возможности программам взаимодействовать с другими программами, а также выступать в качестве встраиваемого переводчика. Несмотря на то, что первоначальной целью было дать возможность программам взаимодействовать, вы можете найти полноценные приложения, написанные на Tcl / Tk.

Особенности Tcl

Особенности Tcl заключаются в следующем —

  • Сокращение времени разработки.

  • Мощный и простой пользовательский интерфейс с интеграцией TK.

  • Пиши один раз, беги куда угодно. Он работает на Windows, Mac OS X и почти на любой платформе Unix.

  • Довольно просто начать работу для опытных программистов; язык настолько прост, что они могут выучить Tcl за несколько часов или дней.

  • Вы можете легко расширить существующие приложения с Tcl. Кроме того, можно включить Tcl в C, C ++ или Java в Tcl или наоборот.

  • Имейте мощный набор сетевых функций.

  • Наконец, это открытый исходный код, бесплатный и может быть использован для коммерческих приложений без каких-либо ограничений.

Сокращение времени разработки.

Мощный и простой пользовательский интерфейс с интеграцией TK.

Пиши один раз, беги куда угодно. Он работает на Windows, Mac OS X и почти на любой платформе Unix.

Довольно просто начать работу для опытных программистов; язык настолько прост, что они могут выучить Tcl за несколько часов или дней.

Вы можете легко расширить существующие приложения с Tcl. Кроме того, можно включить Tcl в C, C ++ или Java в Tcl или наоборот.

Имейте мощный набор сетевых функций.

Наконец, это открытый исходный код, бесплатный и может быть использован для коммерческих приложений без каких-либо ограничений.

Приложения

Tcl — это язык общего назначения, и вы можете найти Tcl везде. Это включает,

  • Масштабируемые сайты, которые часто поддерживаются базами данных.
  • Высокопроизводительные веб-серверы создаются с помощью TclHttpd.
  • Tcl с CGI-сайтами.
  • Настольные приложения с графическим интерфейсом.
  • Встроенные приложения.

Tcl — настройка среды

Настройка локальной среды

Если вы хотите настроить свою среду для Tcl, вам потребуются следующие два программных приложения, доступные на вашем компьютере:

  • Текстовый редактор
  • Tcl переводчик.

Текстовый редактор

Это будет использоваться для ввода вашей программы. Примерами нескольких текстовых редакторов являются Блокнот Windows, команда «Редактирование ОС», Brief, Epsilon, EMACS и vim или vi.

Имя и версия текстового редактора могут различаться в разных операционных системах. Например, Блокнот будет использоваться в Windows, а vim или vi могут использоваться в Windows, а также в Linux или UNIX.

Файлы, которые вы создаете в текстовом редакторе, называются исходными файлами и содержат исходный код программы. Исходные файлы для программ Tcl названы с расширением «.tcl» .

Прежде чем приступить к программированию, убедитесь, что у вас есть один текстовый редактор, и у вас достаточно опыта, чтобы написать компьютерную программу, сохранить ее в файле, собрать ее и, наконец, выполнить.

Переводчик Tcl

Это небольшая программа, которая позволяет вам вводить команды Tcl и выполнять их построчно. Он останавливает выполнение файла tcl, в случае, если он сталкивается с ошибкой в ​​отличие от компилятора, который выполняется полностью.

Давайте создадим файл helloWorld.tcl следующим образом. Мы будем использовать это как первую программу, работающую на платформе, которую вы выберете.

#!/usr/bin/tclsh

puts "Hello World!" 

Установка на Windows

Загрузите последнюю версию для установщика Windows из списка доступных двоичных файлов Active Tcl. Активная версия сообщества Tcl бесплатна для личного использования.

Запустите загруженный исполняемый файл для установки Tcl, что можно сделать, следуя инструкциям на экране.

Теперь мы можем создать и запустить файл Tcl, скажем helloWorld.tcl, переключившись на папку, содержащую файл, с помощью команды ‘cd’, а затем выполнить программу, выполнив следующие шаги

C:\Tcl> tclsh helloWorld.tcl

Мы можем увидеть следующий вывод.

C:\Tcl> helloWorld

C: \ Tcl — папка, которую я использую для сохранения своих образцов. Вы можете изменить его на папку, в которой вы сохранили программы Tcl.

Установка в Linux

Большинство операционных систем Linux поставляются со встроенным Tcl, и вы можете сразу же начать работу с этими системами. В случае, если он недоступен, вы можете использовать следующую команду для загрузки и установки Tcl-Tk.

$ yum install tcl tk

Теперь мы можем создать и запустить файл Tcl, скажем helloWorld.tcl, переключившись на папку, содержащую этот файл, с помощью команды «cd», а затем выполнить программу, выполнив следующие шаги:

$ tclsh helloWorld.tcl

Мы можем увидеть следующий вывод —

$ hello world

Установка в системах на основе Debian

В случае, если это не доступно в вашей ОС, вы можете использовать следующую команду для загрузки и установки Tcl-Tk —

$ sudo apt-get install tcl tk

Теперь мы можем создать и запустить файл Tcl, скажем helloWorld.tcl, переключившись на папку, содержащую этот файл, с помощью команды «cd», а затем выполнить программу, выполнив следующие шаги:

$ tclsh helloWorld.tcl

Мы можем увидеть следующий вывод —

$ hello world

Установка в Mac OS X

Загрузите последнюю версию пакета Mac OS X из списка доступных двоичных файлов Active Tcl. Активная версия сообщества Tcl бесплатна для личного использования.

Запустите загруженный исполняемый файл, чтобы установить Active Tcl, что можно сделать, следуя инструкциям на экране.

Теперь мы можем создать и запустить файл Tcl, скажем helloWorld.tcl, переключившись на папку, содержащую файл, используя «cd», а затем выполнить программу, выполнив следующие шаги:

$ tclsh helloWorld.tcl

Мы можем увидеть следующий вывод —

$ hello world

Установка из исходных файлов

Вы можете использовать опцию установки из исходных файлов, когда двоичный пакет недоступен. Обычно предпочтительно использовать двоичные файлы Tcl для Windows и Mac OS X, поэтому ниже показана только компиляция исходных текстов в системе на основе Unix.

  • Загрузите исходные файлы.

  • Теперь используйте следующие команды для извлечения, компиляции и сборки после переключения в загруженную папку.

Загрузите исходные файлы.

Теперь используйте следующие команды для извлечения, компиляции и сборки после переключения в загруженную папку.

$ tar zxf tcl8.6.1-src.tar.gz
$ cd tcl8.6.1
$ cd unix
$ ./configure —prefix=/opt —enable-gcc
$ make
$ sudo make install

Примечание. Убедитесь, что вы изменили имя файла на версию, загруженную по командам 1 и 2, указанным выше.

Tcl — специальные переменные

В Tcl мы классифицируем некоторые переменные как специальные переменные, и они имеют предопределенное использование / функциональность. Список специальных переменных приведен ниже.

Sr.No. Специальная переменная и описание
1

ARGC

Относится к ряду аргументов командной строки.

2

ARGV

Относится к списку, содержащему аргументы командной строки.

3

argv0

Относится к имени файла интерпретируемого файла или имени, под которым мы вызываем скрипт.

4

окр

Используется для представления массива элементов, которые являются переменными среды.

5

код ошибки

Предоставляет код ошибки для последней ошибки Tcl.

6

errorInfo

Предоставляет трассировку стека для последней ошибки Tcl.

7

tcl_interactive

Используется для переключения между интерактивным и неинтерактивным режимами, устанавливая это в 1 и 0 соответственно.

8

tcl_library

Используется для настройки расположения стандартных библиотек Tcl.

9

tcl_pkgPath

Предоставляет список каталогов, в которых обычно установлены пакеты.

10

tcl_patchLevel

Относится к текущему уровню исправления интерпретатора Tcl.

11

tcl_platform

Используется для представления массива элементов с объектами, включая byteOrder, machine, osVersion, platform и os.

12

tcl_precision

Относится к точности, т. Е. К числу цифр, сохраняемых при преобразовании чисел с плавающей запятой в строки. Значение по умолчанию 12.

13

tcl_prompt1

Относится к первичной подсказке.

14

tcl_prompt2

Относится к дополнительному приглашению с недопустимыми командами.

15

tcl_rcFileName

Предоставляет пользовательский файл запуска.

16

tcl_traceCompile

Используется для контроля трассировки компиляции байт-кода. Используйте 0 для отсутствия вывода, 1 для сводки и 2 для подробности.

17

tcl_traceExec

Используется для контроля отслеживания выполнения байт-кода. Используйте 0 для отсутствия вывода, 1 для сводки и 2 для подробности.

18

tcl_version

Возвращает текущую версию интерпретатора Tcl.

ARGC

Относится к ряду аргументов командной строки.

ARGV

Относится к списку, содержащему аргументы командной строки.

argv0

Относится к имени файла интерпретируемого файла или имени, под которым мы вызываем скрипт.

окр

Используется для представления массива элементов, которые являются переменными среды.

код ошибки

Предоставляет код ошибки для последней ошибки Tcl.

errorInfo

Предоставляет трассировку стека для последней ошибки Tcl.

tcl_interactive

Используется для переключения между интерактивным и неинтерактивным режимами, устанавливая это в 1 и 0 соответственно.

tcl_library

Используется для настройки расположения стандартных библиотек Tcl.

tcl_pkgPath

Предоставляет список каталогов, в которых обычно установлены пакеты.

tcl_patchLevel

Относится к текущему уровню исправления интерпретатора Tcl.

tcl_platform

Используется для представления массива элементов с объектами, включая byteOrder, machine, osVersion, platform и os.

tcl_precision

Относится к точности, т. Е. К числу цифр, сохраняемых при преобразовании чисел с плавающей запятой в строки. Значение по умолчанию 12.

tcl_prompt1

Относится к первичной подсказке.

tcl_prompt2

Относится к дополнительному приглашению с недопустимыми командами.

tcl_rcFileName

Предоставляет пользовательский файл запуска.

tcl_traceCompile

Используется для контроля трассировки компиляции байт-кода. Используйте 0 для отсутствия вывода, 1 для сводки и 2 для подробности.

tcl_traceExec

Используется для контроля отслеживания выполнения байт-кода. Используйте 0 для отсутствия вывода, 1 для сводки и 2 для подробности.

tcl_version

Возвращает текущую версию интерпретатора Tcl.

Указанные выше специальные переменные имеют свои особые значения для интерпретатора Tcl.

Примеры использования специальных переменных Tcl

Давайте посмотрим несколько примеров для специальных переменных.

Версия Tcl

Live Demo

#!/usr/bin/tclsh

puts $tcl_version

Когда вы запустите программу, вы получите похожий вывод, как показано ниже —

8.6

Tcl Environment Path

Live Demo

#!/usr/bin/tclsh

puts $env(PATH)

Когда вы запустите программу, вы получите похожий вывод, как показано ниже —

/home/cg/root/GNUstep/Tools:/usr/GNUstep/Local/Tools:/usr/GNUstep/
System/Tools:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/webmaster/.local/bin:/
home/webmaster/bin:/usr/local/scriba/bin:/usr/local/smlnj/
bin:/usr/local/bin/std:/usr/local/bin/extra:/usr/local/fantom/bin:/usr/
local/dart/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/opt/mono/
bin:/opt/mono/lib/mono/4.5:/usr/local/bin:.:/usr/libexec/sdcc:/usr/local/
icon-v950/bin:/usr/local/mozart/bin:/opt/Pawn/bin:/opt/jdk1.7.0_75/bin:/
opt/jdk1.7.0_75/jre/bin:/opt/pash/Source/PashConsole/bin/Debug/

Путь к пакету Tcl

Live Demo

#!/usr/bin/tclsh

puts $tcl_pkgPath

Когда вы запустите программу, вы получите похожий вывод, как показано ниже —

/usr/lib64/tcl8.6 /usr/share/tcl8.6 /usr/lib64/tk8.6 /usr/share/tk8.6

Библиотека Tcl

Live Demo

#!/usr/bin/tclsh

puts $tcl_library

Когда вы запустите программу, вы получите похожий вывод, как показано ниже —

/usr/share/tcl8.6

Уровень Tcl Patch

Live Demo

#!/usr/bin/tclsh

puts $tcl_patchLevel

Когда вы запустите программу, вы получите похожий вывод, как показано ниже —

8.6.6

Tcl Precision

Live Demo

#!/usr/bin/tclsh

puts $tcl_precision

Когда вы запустите программу, вы получите похожий вывод, как показано ниже —

0

Tcl Startup File

Live Demo

#!/usr/bin/tclsh

puts $tcl_rcFileName

Когда вы запустите программу, вы получите похожий вывод, как показано ниже —

~/.tclshrc

Tcl — основной синтаксис

Tcl довольно прост в освоении, и давайте начнем создавать нашу первую программу Tcl!

Первая программа Tcl

Давайте напишем простую программу Tcl. Все файлы Tcl будут иметь расширение, т.е. .tcl. Итак, поместите следующий исходный код в файл test.tcl.

Live Demo

#!/usr/bin/tclsh

puts "Hello, World!" 

Предполагая, что среда Tcl настроена правильно; давайте запустим программу после переключения в каталог файла и затем запустим программу, используя —

$ tclsh test.tcl

Мы получим следующий вывод —

Hello, World!

Давайте теперь посмотрим на базовую структуру программы Tcl, так что вам будет легко понять основные строительные блоки языка Tcl. В Tcl мы используем новую строку или точку с запятой для завершения предыдущей строки кода. Но точка с запятой не обязательна, если вы используете новую строку для каждой команды.

Комментарии

Комментарии подобны тексту помощи в вашей программе Tcl, и интерпретатор их игнорирует. Комментарии могут быть написаны с использованием знака хэш _ (#) в начале.

Live Demo

#!/usr/bin/tclsh

# my first program in Tcl
puts "Hello World!" 

Когда приведенный выше код выполняется, он дает следующий результат —

Hello World!

Многострочный или блочный комментарий пишется с использованием ‘if’ с условием ‘0’. Пример показан ниже.

Live Demo

#!/usr/bin/tclsh

if 0 {
   my first program in Tcl program
   Its very simple
}
puts "Hello World!" 

Когда приведенный выше код выполняется, он дает следующий результат —

Hello World!

Использование встроенных комментариев; Пример приведен ниже.

Live Demo

#!/usr/bin/tclsh

puts "Hello World!" ;# my first print in Tcl program

Когда приведенный выше код выполняется, он дает следующий результат —

Hello World!

Идентификаторы

Идентификатор Tcl — это имя, используемое для идентификации переменной, функции или любого другого пользовательского элемента. Идентификатор начинается с буквы от A до Z или от a до z или подчеркивания (_), за которым следуют ноль или более букв, подчеркивания, доллары ($) и цифры (от 0 до 9).

Tcl не допускает использование знаков препинания, таких как @ и% в идентификаторах. Tcl является регистрозависимым _ языком. Таким образом, рабочая сила и рабочая сила — два разных идентификатора в Tcl. Вот несколько примеров допустимых идентификаторов:

mohd       zara    abc   move_name  a_123
myname50   _temp   j     a23b9      retVal

Зарезервированные слова

Следующий список показывает несколько зарезервированных слов в Tcl. Эти зарезервированные слова не могут использоваться как константы или переменные или любые другие имена идентификаторов.

после присоединять массив auto_execok
auto_import auto_load auto_load_index auto_qualify
двоичный Bgerror перерыв ловить
CD Часы близко CONCAT
Продолжить Dde дефолт еще
ElseIf кодирование ВФ ошибка
Eval Exec выход выраж
fblocked Fconfigure F КОПИРОВАТЬ файл
fileevent Промывать за для каждого
формат Получает шарик Глобальный
история Если Информация интерп
присоединиться Lappend LINDEX шланга вставьте
список Llength нагрузка lrange
lreplace Lsearch lsort Пространство имен
открыть пакет ПИД-регулятор pkg_mkIndex
процедура Оферты PWD читать
регулярное выражение Regsub переименовать ресурс
вернуть сканирование искать задавать
разъем Источник Трещина строка
Подст переключатель tclLog сказать
время след неизвестный снята с охраны
Обновить Верхний уровень upvar переменная
VWait В то время как

Пробелы в Tcl

Строка, содержащая только пробел, возможно, с комментарием, называется пустой строкой , и интерпретатор Tcl полностью игнорирует ее.

Пробел — это термин, используемый в Tcl для описания пробелов, вкладок, символов новой строки и комментариев. Пробелы отделяют одну часть оператора от другой и позволяют интерпретатору определить, где один элемент в утверждении, например, ставит, заканчивается и начинается следующий элемент. Поэтому в следующем утверждении —

#!/usr/bin/tclsh

puts "Hello World!" 

Должен быть как минимум один символ пробела (обычно пробел) между «путями» и «Hello World!» чтобы переводчик мог их различить. С другой стороны, в следующем утверждении —

Live Demo

#!/usr/bin/tclsh

puts [expr 3 + 2] ;# print sum of the 3 and 2

Когда приведенный выше код выполняется, он дает следующий результат —

5

Никакие пробельные символы не нужны между 3 и + или между + и 2; Тем не менее, вы можете включить некоторые из них, если вы хотите для удобства чтения.

Tcl — Команды

Как вы знаете, Tcl — это язык команд Tool, команды являются наиболее важной частью языка. Команды Tcl встроены в язык, каждая из которых имеет свою предопределенную функцию. Эти команды формируют зарезервированные слова языка и не могут использоваться для именования других переменных. Преимущество этих команд Tcl заключается в том, что вы можете определить собственную реализацию для любой из этих команд, чтобы заменить оригинальные встроенные функции.

Каждая из команд Tcl проверяет ввод, и это уменьшает работу интерпретатора.

Команда Tcl на самом деле представляет собой список слов, причем первое слово представляет команду для выполнения. Следующие слова представляют аргументы. Чтобы сгруппировать слова в один аргумент, мы заключаем несколько слов с помощью «» или {}.

Синтаксис команды Tcl следующий:

commandName argument1 argument2 ... argumentN

Давайте посмотрим на простой пример команды Tcl —

Live Demo

#!/usr/bin/tclsh

puts "Hello, world!"

Когда приведенный выше код выполняется, он дает следующий результат —

Hello, world!

В приведенном выше коде «put» — это команда Tcl, а «Hello World» — это аргумент1. Как было сказано ранее, мы использовали «» для группировки двух слов.

Давайте посмотрим еще один пример команды Tcl с двумя аргументами —

Live Demo

#!/usr/bin/tclsh

puts stdout "Hello, world!"

Когда приведенный выше код выполняется, он дает следующий результат —

Hello, world!

В вышеприведенном коде «put» — это команда Tcl, «stdout» — это аргумент1, а «Hello World» — аргумент2. Здесь stdout заставляет программу печатать на стандартном устройстве вывода.

Подстановка команд

В подстановках команд квадратные скобки используются для оценки сценариев внутри квадратных скобок. Простой пример добавления двух чисел показан ниже —

Live Demo

#!/usr/bin/tclsh

puts [expr 1 + 6 + 9]

Когда приведенный выше код выполняется, он дает следующий результат —

16

Подстановка переменных

В подстановках переменных $ используется перед именем переменной, и это возвращает содержимое переменной. Простой пример установки значения переменной и его вывода показан ниже.

Live Demo

#!/usr/bin/tclsh

set a 3
puts $a

Когда приведенный выше код выполняется, он дает следующий результат —

3

Замена обратной косой черты

Они обычно называются escape-последовательностями ; с каждой обратной косой чертой, за которой следует буква, имеющая свое значение. Простой пример замены новой строки показан ниже —

Live Demo

#!/usr/bin/tclsh

puts "Hello\nWorld"

Когда приведенный выше код выполняется, он дает следующий результат —

Hello
World

Tcl — типы данных

Примитивный тип данных Tcl — строка, и часто мы можем найти кавычки на Tcl как язык только для строк. Эти примитивные типы данных, в свою очередь, создают составные типы данных для списка и ассоциативного массива. В Tcl типы данных могут представлять не только простые объекты Tcl, но также могут представлять сложные объекты, такие как дескрипторы, графические объекты (в основном, виджеты) и каналы ввода-вывода. Давайте посмотрим на детали о каждом из вышеперечисленных.

Простые объекты Tcl

В Tcl, будь то целое число, логическое число, число с плавающей запятой или строка. Когда вы хотите использовать переменную, вы можете напрямую присвоить ей значение, в Tcl нет шага объявления. Могут быть внутренние представления для этих различных типов объектов. При необходимости он может преобразовывать один тип данных в другой. Синтаксис для присвоения значения переменной следующий:

Live Demo

#!/usr/bin/tclsh

set myVariable 18
puts $myVariable

Когда приведенный выше код выполняется, он дает следующий результат —

18

Приведенный выше оператор создаст имя переменной myVariable и сохранит ее в виде строки, хотя мы не использовали двойные кавычки. Теперь, если мы попытаемся сделать арифметику для переменной, она автоматически превращается в целое число. Простой пример показан ниже —

Live Demo

#!/usr/bin/tclsh

set myVariable 18
puts [expr $myVariable + 6 + 9]

Когда приведенный выше код выполняется, он дает следующий результат —

33

Важно отметить, что эти переменные не имеют никаких значений по умолчанию и должны быть назначены значения перед их использованием.

Если мы пытаемся печатать путями, число преобразуется в правильную строку. Наличие двух представлений, внутреннего и внешнего, помогает Tcl легко создавать сложные структуры данных по сравнению с другими языками. Кроме того, Tcl более эффективен благодаря своей динамической объектной природе.

Строковые представления

В отличие от других языков, в Tcl вам не нужно включать двойные кавычки, когда это всего лишь одно слово. Примером может быть —

Live Demo

#!/usr/bin/tclsh

set myVariable hello
puts $myVariable

Когда приведенный выше код выполняется, он дает следующий результат —

hello

Когда мы хотим представить несколько строк, мы можем использовать либо двойные кавычки, либо фигурные скобки. Это показано ниже —

Live Demo

#!/usr/bin/tclsh

set myVariable "hello world"
puts $myVariable
set myVariable {hello world}
puts $myVariable

Когда приведенный выше код выполняется, он дает следующий результат —

hello world
hello world

Список

Список — это не что иное, как группа элементов. Группа слов, использующая двойные кавычки или фигурные скобки, может использоваться для представления простого списка. Простой список показан ниже —

Live Demo

#!/usr/bin/tclsh

set myVariable {red green blue}
puts [lindex $myVariable 2]
set myVariable "red green blue"
puts [lindex $myVariable 1]

Когда приведенный выше код выполняется, он дает следующий результат —

blue
green

Ассоциативный массив

Ассоциативные массивы имеют индекс (ключ), который не обязательно является целым числом. Обычно это строка, которая действует как пары ключ-значение. Простой пример показан ниже —

Live Demo

#!/usr/bin/tclsh

set  marks(english) 80
puts $marks(english)
set  marks(mathematics) 90
puts $marks(mathematics)

Когда приведенный выше код выполняется, он дает следующий результат —

80
90

рукоятки

Дескрипторы Tcl обычно используются для представления файлов и графических объектов. Они могут включать дескрипторы сетевых запросов, а также другие каналы, такие как последовательный порт, сокеты или устройства ввода-вывода. Ниже приведен пример, где создается дескриптор файла.

set myfile [open "filename" r]

Подробнее о файлах вы узнаете в главе « Ввод / вывод файла Tcl» .

Tcl — переменные

В Tcl нет концепции объявления переменных. Как только новое имя переменной встретится, Tcl определит новую переменную.

Именование переменных

Имя переменных может содержать любые символы и длину. Вы даже можете иметь пробелы, заключив переменную в фигурные скобки, но это не является предпочтительным.

Команда set используется для присвоения значения переменной. Синтаксис для команды set:

set variableName value

Несколько примеров переменных показаны ниже —

Live Demo

#!/usr/bin/tclsh

set variableA 10
set {variable B} test
puts $variableA
puts ${variable B}

Когда приведенный выше код выполняется, он дает следующий результат —

10
test

Как вы можете видеть в приведенной выше программе, $ variableName используется для получения значения переменной.

Динамический набор текста

Tcl — это динамически типизированный язык. При необходимости значение переменной может быть динамически преобразовано в требуемый тип. Например, число 5, которое хранится в виде строки, будет преобразовано в число при выполнении арифметической операции. Это показано ниже —

Live Demo

#!/usr/bin/tclsh

set variableA "10"
puts $variableA
set sum [expr $variableA +20];
puts $sum

Когда приведенный выше код выполняется, он дает следующий результат —

10
30

Математические выражения

Как вы можете видеть в приведенном выше примере, expr используется для представления математического выражения. Точность по умолчанию Tcl составляет 12 цифр. Чтобы получить результаты с плавающей запятой, мы должны добавить хотя бы одну десятичную цифру. Простой пример объясняет вышеизложенное.

Live Demo

#!/usr/bin/tclsh

set variableA "10"
set result [expr $variableA / 9];
puts $result
set result [expr $variableA / 9.0];
puts $result
set variableA "10.0"
set result [expr $variableA / 9];
puts $result

Когда приведенный выше код выполняется, он дает следующий результат —

1
1.1111111111111112
1.1111111111111112

В приведенном выше примере вы можете увидеть три случая. В первом случае, дивиденд и делитель являются целыми числами, и мы получаем целое число в результате. Во втором случае один только делитель является десятичным числом, а в третьем случае дивидендом является десятичное число. И во втором, и в третьем случаях мы получаем десятичное число в качестве результата.

В приведенном выше коде вы можете изменить точность, используя специальную переменную tcl_precision. Это показано ниже —

Live Demo

#!/usr/bin/tclsh

set variableA "10"
set tcl_precision 5
set result [expr $variableA / 9.0];
puts $result

Когда приведенный выше код выполняется, он дает следующий результат —

1.1111

Tcl — Операторы

Оператор — это символ, который указывает компилятору выполнять определенные математические или логические манипуляции. Язык Tcl богат встроенными операторами и предоставляет следующие типы операторов:

  • Арифметические Операторы
  • Операторы отношений
  • Логические Операторы
  • Битовые операторы
  • Троичный оператор

Типы операторов

В этой главе один за другим будут объяснены арифметические, реляционные, логические, побитовые и троичные операторы.

Арифметические Операторы

В следующей таблице приведены все арифметические операторы, поддерживаемые языком Tcl. Предположим, что переменная «A» содержит 10, а переменная «B» содержит 20, тогда —

Показать примеры

оператор Описание пример
+ Добавляет два операнда А + Б даст 30
Вычитает второй операнд из первого A — B даст -10
* Умножает оба операнда А * Б даст 200
/ Делит числитель на числитель Б / у даст 2
% Оператор модуля и остаток от целочисленного деления B% A даст 0

Операторы отношений

В следующей таблице показаны все реляционные операторы, поддерживаемые языком Tcl. Предположим, что переменная A содержит 10, а переменная B содержит 20, тогда —

Показать примеры

оператор Описание пример
== Проверяет, равны ли значения двух операндов или нет, если да, тогда условие становится истинным. (A == B) не соответствует действительности.
знак равно Проверяет, равны ли значения двух операндов или нет, если значения не равны, тогда условие становится истинным. (A! = B) верно.
> Проверяет, больше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. (A> B) не соответствует действительности.
< Проверяет, меньше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. (A <B) верно.
> = Проверяет, больше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. (A> = B) не соответствует действительности.
<= Проверяет, меньше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. (A <= B) верно.

Логические Операторы

В следующей таблице приведены все логические операторы, поддерживаемые языком Tcl. Предположим, что переменная A содержит 1, а переменная B содержит 0, тогда —

Показать примеры

оператор Описание пример
&& Называется логический оператор И. Если оба операнда отличны от нуля, условие становится истинным. (A && B) неверно.
|| Вызывается логическим оператором ИЛИ. Если любой из двух операндов отличен от нуля, условие становится истинным. (A || B) верно.
! Вызывается логическим оператором НЕ. Используйте для изменения логического состояния своего операнда. Если условие истинно, то оператор Логический НЕ будет делать ложь. ! (A && B) верно.

Битовые операторы

Побитовый оператор работает с битами и выполняет побитовую операцию. Таблицы истинности для &, | и ^ следующие:

п Q P & Q р | Q р ^ д
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

Предположим, если А = 60; и B = 13; теперь в двоичном формате они будут выглядеть следующим образом —

A = 0011 1100

B = 0000 1101

———————-

A & B = 0000 1100

A | B = 0011 1101

A ^ B = 0011 0001

Побитовые операторы, поддерживаемые языком Tcl, перечислены в следующей таблице. Предположим, что переменная A содержит 60, а переменная B содержит 13, тогда —

Показать примеры

оператор Описание пример
& Двоичный оператор AND немного копирует результат, если он существует в обоих операндах. (A & B) даст 12, что составляет 0000 1100
| Оператор двоичного ИЛИ копирует немного, если он существует в любом из операндов. (A | B) даст 61, что составляет 0011 1101
^ Двоичный оператор XOR копирует бит, если он установлен в одном операнде, но не в обоих. (A ^ B) даст 49, что составляет 0011 0001
<< Двоичный оператор левого сдвига. Значение левого операнда перемещается влево на количество битов, указанное правым операндом. А << 2 даст 240, что составляет 1111 0000
>> Оператор двоичного правого сдвига. Значение левого операнда перемещается вправо на количество битов, указанное правым операндом. A >> 2 даст 15, что составляет 0000 1111

Троичный оператор

Показать примеры

оператор Описание пример
? : троичный Если условие верно? Тогда значение X: в противном случае значение Y

Приоритет операторов в Tcl

Приоритет оператора определяет группировку терминов в выражении. Это влияет на то, как оценивается выражение. Некоторые операторы имеют более высокий приоритет, чем другие; например, оператор умножения имеет более высокий приоритет, чем оператор сложения.

Например : х = 7 + 3 * 2; здесь x назначено 13, а не 20, потому что оператор * имеет более высокий приоритет, чем +, поэтому он сначала умножается на 3 * 2, а затем прибавляется к 7.

Здесь операторы с самым высоким приоритетом отображаются вверху таблицы, а операторы с самым низким — внизу. Внутри выражения операторы с более высоким приоритетом будут оцениваться первыми.

Показать примеры

категория оператор Ассоциативность
Одинарный + — Справа налево
Multiplicative * /% Слева направо
присадка + — Слева направо
сдвиг << >> Слева направо
реляционный <<=>> = Слева направо
Побитовое И & Слева направо
Побитовый XOR ^ Слева направо
Побитовое ИЛИ | Слева направо
Логическое И && Слева направо
Логическое ИЛИ || Слева направо
троичный ?: Справа налево

Tcl — Решения

Структуры принятия решений требуют, чтобы программист определял одно или несколько условий, которые должны быть оценены или протестированы программой, вместе с оператором или инструкциями, которые должны быть выполнены, если условие определено как истинное, и, необязательно, другие операторы, которые должны быть выполнены, если условие определяется как ложный.

Ниже приводится общая форма типичной структуры принятия решений, встречающейся в большинстве языков программирования.

Принятие решения

Язык Tcl использует команду expr для внутреннего использования, поэтому мы не обязаны явно использовать выражение expr.

Язык Tcl предоставляет следующие типы заявлений о принятии решений —

Sr.No. Заявление и описание
1 если заявление

Оператор ‘if’ состоит из логического выражения, за которым следует одно или несколько операторов.

2 если … еще заявление

За оператором if может следовать необязательный оператор else, который выполняется, когда логическое выражение имеет значение false.

3 вложенные операторы if

Вы можете использовать один оператор «if» или «else if» внутри другого оператора «if» или «else if».

4 заявление о переключении

Оператор switch позволяет проверять переменную на соответствие списку значений.

5 вложенные операторы switch

Вы можете использовать один оператор switch внутри другого оператора (ов) switch .

Оператор ‘if’ состоит из логического выражения, за которым следует одно или несколько операторов.

За оператором if может следовать необязательный оператор else, который выполняется, когда логическое выражение имеет значение false.

Вы можете использовать один оператор «if» или «else if» внутри другого оператора «if» или «else if».

Оператор switch позволяет проверять переменную на соответствие списку значений.

Вы можете использовать один оператор switch внутри другого оператора (ов) switch .

? : Оператор

Мы накрыли условного оператора? : в предыдущей главе, которая может быть использована для замены операторов if … else . Он имеет следующую общую форму —

Exp1 ? Exp2 : Exp3;

Где Exp1, Exp2 и Exp3 являются выражениями. Обратите внимание на использование и размещение толстой кишки.

Значение а? выражение ‘определяется следующим образом: Exp1 оценивается. Если это правда, тогда Exp2 вычисляется и становится значением целого ‘? Выражение «. Если Exp1 имеет значение false, то Exp3 оценивается, и его значение становится значением выражения. Пример показан ниже.

Live Demo

#!/usr/bin/tclsh

set a 10;
set b [expr $a == 1 ? 20: 30]
puts "Value of b is $b\n"
set b [expr $a == 10 ? 20: 30]
puts "Value of b is $b\n" 

Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —

Value of b is 30
Value of b is 20

Tcl — Петли

Может возникнуть ситуация, когда вам нужно выполнить блок кода несколько раз. В общем случае операторы выполняются последовательно: первый оператор в функции выполняется первым, затем второй и так далее.

Языки программирования предоставляют различные управляющие структуры, которые допускают более сложные пути выполнения.

Оператор цикла позволяет нам выполнять оператор или группу операторов несколько раз, и в большинстве языков программирования ниже приводится общая форма инструкции цикла.

Петлевая архитектура

Язык Tcl предоставляет следующие типы циклов для обработки требований циклов.

Sr.No. Тип и описание петли
1 в то время как цикл

Повторяет оператор или группу операторов, пока данное условие выполняется. Он проверяет условие перед выполнением тела цикла.

2 для цикла

Выполняет последовательность операторов несколько раз и сокращает код, который управляет переменной цикла.

3 вложенные циклы

Вы можете использовать один или несколько циклов внутри любого другого цикла while, for или do.. while.

Повторяет оператор или группу операторов, пока данное условие выполняется. Он проверяет условие перед выполнением тела цикла.

Выполняет последовательность операторов несколько раз и сокращает код, который управляет переменной цикла.

Вы можете использовать один или несколько циклов внутри любого другого цикла while, for или do.. while.

Заявления о контроле цикла

Операторы управления циклом изменяют выполнение от его нормальной последовательности. Когда выполнение покидает область действия, все автоматические объекты, созданные в этой области, уничтожаются.

Tcl поддерживает следующие управляющие операторы.

Sr.No. Контрольное заявление и описание
1 заявление о нарушении

Завершает оператор цикла или переключателя и передает выполнение в оператор, следующий сразу за циклом или переключателем.

2 продолжить заявление

Заставляет петлю пропускать оставшуюся часть своего тела и немедленно проверять свое состояние перед повторением.

Завершает оператор цикла или переключателя и передает выполнение в оператор, следующий сразу за циклом или переключателем.

Заставляет петлю пропускать оставшуюся часть своего тела и немедленно проверять свое состояние перед повторением.

Бесконечный цикл

Цикл становится бесконечным, если условие никогда не становится ложным. Цикл while традиционно используется для этой цели. Вы можете сделать бесконечный цикл, оставив условное выражение равным 1.

while {1} {
   puts "This loop will run forever."
}

Когда условное выражение отсутствует, оно считается истинным. Программисты Tcl чаще используют конструкцию while {1} для обозначения бесконечного цикла.

ПРИМЕЧАНИЕ. — Вы можете завершить бесконечный цикл, нажав клавиши Ctrl + C.

Tcl — Массивы

Массив — это систематическое расположение группы элементов с использованием индексов. Синтаксис для обычного массива показан ниже.

set ArrayName(Index) value

Пример для создания простого массива показан ниже.

Live Demo

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
puts $languages(0)
puts $languages(1)

Когда приведенный выше код выполняется, он дает следующий результат —

Tcl
C Language

Размер массива

Синтаксис для вычисления размера массива показан ниже.

[array size variablename]

Пример для печати размера показан ниже.

Live Demo

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
puts  [array size languages]

Когда приведенный выше код выполняется, он дает следующий результат —

2

Итерация массива

Хотя индексы массива могут быть не непрерывными, как значения, указанные для индекса 1, затем индекса 10 и так далее. Но, если они непрерывны, мы можем использовать итерацию массива для доступа к элементам массива. Простая итерация массива для печати элементов массива показана ниже.

Live Demo

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
for { set index 0 }  { $index < [array size languages] }  { incr index } {
   puts "languages($index) : $languages($index)"
}

Когда приведенный выше код выполняется, он дает следующий результат —

languages(0) : Tcl
languages(1) : C Language

Ассоциативные массивы

В Tcl все массивы по своей природе являются ассоциативными. Массивы хранятся и извлекаются без какого-либо определенного порядка. Ассоциативные массивы имеют индекс, который не обязательно является числом и может быть малонаселенным. Простой пример для ассоциативного массива с нечисловыми индексами показан ниже.

Live Demo

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
puts  $personA(Name)
puts  $personA(Age)

Когда приведенный выше код выполняется, он дает следующий результат —

Dave
14

Индексы массива

Синтаксис для получения индексов массива показан ниже.

[array names variablename]

Пример для печати размера показан ниже.

Live Demo

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
puts [array names personA]

Когда приведенный выше код выполняется, он дает следующий результат —

Age Name

Итерация ассоциативного массива

Вы можете использовать индексы массива для итерации по ассоциативному массиву. Пример показан ниже.

Live Demo

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
foreach index [array names personA] {
   puts "personA($index): $personA($index)"
}

Когда приведенный выше код выполняется, он дает следующий результат —

personA(Age): 14
personA(Name): Dave

Tcl — Струны

Примитивный тип данных Tcl — строка, и часто мы можем найти кавычки на Tcl как язык только для строк. Эти строки могут содержать буквенно-цифровые символы, только цифры, логические или даже двоичные данные. Tcl использует 16-битные символы Unicode, а буквенно-цифровые символы могут содержать буквы, включая нелатинские символы, цифры или знаки пунктуации.

Логическое значение может быть представлено как 1, да или истина для истины и 0, нет или ложь для ложного.

Строковые представления

В отличие от других языков, в Tcl вам не нужно включать двойные кавычки, когда это всего лишь одно слово. Примером может быть —

Live Demo

#!/usr/bin/tclsh

set myVariable hello
puts $myVariable

Когда приведенный выше код выполняется, он дает следующий результат —

hello

Когда мы хотим представить несколько строк, мы можем использовать либо двойные кавычки, либо фигурные скобки. Это показано ниже —

Live Demo

#!/usr/bin/tclsh

set myVariable "hello world"
puts $myVariable
set myVariable {hello world}
puts $myVariable

Когда приведенный выше код выполняется, он дает следующий результат —

hello world
hello world

Последовательность выхода из строки

Символьный литерал может быть простым символом (например, «x»), escape-последовательностью (например, «\ t») или универсальным символом (например, «\ u02C0»).

В Tcl есть определенные символы, когда им предшествует обратная косая черта, они будут иметь особое значение и использоваться для представления, например, новой строки (\ n) или табуляции (\ t). Здесь у вас есть список некоторых из таких кодов escape-последовательностей —

Последовательность побега Имея в виду
\\ \ персонаж
‘ персонаж
» персонаж
\? ? персонаж
\ а Оповещение или звонок
\ б возврат на одну позицию
\ е Форма подачи
\ п Новая линия
Возврат каретки
\ т Горизонтальная вкладка
\ v Вертикальная вкладка

Ниже приведен пример, показывающий несколько символов escape-последовательности:

Live Demo

#!/usr/bin/tclsh

puts "Hello\tWorld\n\nTutorialspoint";

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Hello   World

Tutorialspoint

Строковая команда

Список подкоманд для строковых команд приведен в следующей таблице:

Sr.No. Методы и описание
1

сравнить строку1 строку2

Сравнивает строку1 и строку2 лексографически. Возвращает 0, если равно, -1, если строка1 предшествует строке2, иначе 1.

2

первая строка1 строка2

Возвращает индекс первого появления строки1 в строке2. Если не найден, возвращает -1.

3

индексная строка

Возвращает символ по индексу.

4

последняя строка1 строка2

Возвращает индекс последнего вхождения string1 в string2. Если не найден, возвращает -1.

5

длина строки

Возвращает длину строки.

6

строка соответствия шаблона

Возвращает 1, если строка соответствует шаблону.

7

строка диапазона index1 index2

Вернуть диапазон символов в строке от index1 до index2.

8

гирлянда

Возвращает строчную строку.

9

струна тупер

Возвращает заглавную строку.

10

обрезать строку?

Удаляет триммерные символы в обоих концах строки. Триммерными символами по умолчанию является пробел.

11

триммерная строка?

Удаляет символы в левом начале строки. Триммерными символами по умолчанию является пробел.

12

аккуратная строка?

Удаляет триммерные символы в левом конце строки. Триммерными символами по умолчанию является пробел.

13

индекс поиска строки

Возвращает индекс в строке поиска символа после слова, содержащего символ в индексе.

14

поиск слов

Возвращает индекс в строке поиска первого символа в слове, содержащем символ в индексе.

сравнить строку1 строку2

Сравнивает строку1 и строку2 лексографически. Возвращает 0, если равно, -1, если строка1 предшествует строке2, иначе 1.

первая строка1 строка2

Возвращает индекс первого появления строки1 в строке2. Если не найден, возвращает -1.

индексная строка

Возвращает символ по индексу.

последняя строка1 строка2

Возвращает индекс последнего вхождения string1 в string2. Если не найден, возвращает -1.

длина строки

Возвращает длину строки.

строка соответствия шаблона

Возвращает 1, если строка соответствует шаблону.

строка диапазона index1 index2

Вернуть диапазон символов в строке от index1 до index2.

гирлянда

Возвращает строчную строку.

струна тупер

Возвращает заглавную строку.

обрезать строку?

Удаляет триммерные символы в обоих концах строки. Триммерными символами по умолчанию является пробел.

триммерная строка?

Удаляет символы в левом начале строки. Триммерными символами по умолчанию является пробел.

аккуратная строка?

Удаляет триммерные символы в левом конце строки. Триммерными символами по умолчанию является пробел.

индекс поиска строки

Возвращает индекс в строке поиска символа после слова, содержащего символ в индексе.

поиск слов

Возвращает индекс в строке поиска первого символа в слове, содержащем символ в индексе.

Примеры некоторых часто используемых подкоманд Tcl string приведены ниже.

Сравнение строк

Live Demo

#!/usr/bin/tclsh

set s1 "Hello"
set s2 "World"
set s3 "World"
puts [string compare s1 s2]
if {[string compare s2 s3] == 0} {
   puts "String \'s1\' and \'s2\' are same."; 
} 

if {[string compare s1 s2] == -1} {
   puts "String \'s1\' comes before \'s2\'.";
}

if {[string compare s2 s1] == 1} {
   puts "String \'s2\' comes after \'s1\'.";
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

-1
String 's1' comes before 's2'.
String 's2' comes after 's1'.

Индекс строки

Live Demo

#!/usr/bin/tclsh

set s1 "Hello World"
set s2 "o"
puts "First occurrence of $s2 in s1"
puts [string first $s2 $s1]
puts "Character at index 0 in s1"
puts [string index $s1 0]
puts "Last occurrence of $s2 in s1"
puts [string last $s2 $s1]
puts "Word end index in s1"
puts [string wordend $s1 20]
puts "Word start index in s1"
puts [string wordstart $s1 20]

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

First occurrence of o in s1
4
Character at index 0 in s1
H
Last occurrence of o in s1
7
Word end index in s1
11
Word start index in s1
6

Длина строки

Live Demo

#!/usr/bin/tclsh

set s1 "Hello World"
puts "Length of string s1"
puts [string length $s1]

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Length of string s1
11

Обработка дел

Live Demo

#!/usr/bin/tclsh

set s1 "Hello World"
puts "Uppercase string of s1"
puts [string toupper $s1]
puts "Lowercase string of s1"
puts [string tolower $s1]

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Uppercase string of s1
HELLO WORLD
Lowercase string of s1
hello world

Обрезка персонажей

Live Demo

#!/usr/bin/tclsh

set s1 "Hello World"
set s2 "World"
puts "Trim right $s2 in $s1"
puts [string trimright $s1 $s2]

set s2 "Hello"
puts "Trim left $s2 in $s1"
puts [string trimleft $s1 $s2]

set s1 " Hello World "
set s2 " "
puts "Trim characters s1 on both sides of s2"
puts [string trim $s1 $s2]

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Trim right World in Hello World
Hello 
Trim left Hello in Hello World
 World
Trim characters s1 on both sides of s2
Hello World

Соответствующие строки

Live Demo

#!/usr/bin/tclsh

set s1 "test@test.com" 
set s2 "*@*.com"
puts "Matching pattern s2 in s1"
puts [string match "*@*.com" $s1 ]
puts "Matching pattern tcl in s1"
puts [string match {tcl} $s1]

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Matching pattern s2 in s1
1
Matching pattern tcl in s1
0

Добавить команду

Live Demo

#!/usr/bin/tclsh

set s1 "Hello" 
append s1 " World"
puts $s1

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Hello World

Команда форматирования

В следующей таблице приведен список спецификаторов формата, доступных в Tcl.

Тендерный использование
% s Строковое представление
% d Целочисленное представление
% е Представление с плавающей точкой
% е Представление с плавающей точкой в ​​мантиссе-показательной форме
%Икс Гекса десятичное представление

Некоторые простые примеры приведены ниже —

Live Demo

#!/usr/bin/tclsh

puts [format "%f" 43.5]
puts [format "%e" 43.5]
puts [format "%d %s" 4 tuts]
puts [format "%s" "Tcl Language"]
puts [format "%x" 40]

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

43.500000
4.350000e+01
4 tuts
Tcl Language
28

Команда сканирования

Команда сканирования используется для анализа строки на основе спецификатора формата. Некоторые примеры приведены ниже.

Live Demo

#!/usr/bin/tclsh

puts [scan "90" {%[0-9]} m]
puts [scan "abc" {%[a-z]} m]
puts [scan "abc" {%[A-Z]} m]
puts [scan "ABC" {%[A-Z]} m]

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

1
1
0
1

Tcl — Списки

Список является одним из основных типов данных, доступных в Tcl. Используется для представления упорядоченной коллекции предметов. Он может включать различные типы элементов в одном списке. Кроме того, список может содержать другой список.

Важно отметить, что эти списки полностью представлены в виде строк и при необходимости обрабатываются для формирования отдельных элементов. Поэтому избегайте больших списков и в таких случаях; использовать массив.

Создание списка

Общий синтаксис для списка приведен ниже —

set listName { item1 item2 item3 .. itemn }
# or
set listName [list item1 item2 item3]
# or 
set listName [split "items separated by a character" split_character]

Некоторые примеры приведены ниже —

Live Demo

#!/usr/bin/tclsh

set colorList1 {red green blue}
set colorList2 [list red green blue]
set colorList3 [split "red_green_blue" _]
puts $colorList1
puts $colorList2
puts $colorList3

Когда приведенный выше код выполняется, он дает следующий результат —

red green blue
red green blue
red green blue

Добавление элемента в список

Синтаксис для добавления элемента в список приведен ниже —

append listName split_character value
# or
lappend listName value

Некоторые примеры приведены ниже —

Live Demo

#!/usr/bin/tclsh

set var orange
append var " " "blue"
lappend var "red" 
lappend var "green" 
puts $var

Когда приведенный выше код выполняется, он дает следующий результат —

orange blue red green

Длина списка

Синтаксис длины списка приведен ниже —

llength listName

Пример длины списка приведен ниже —

Live Demo

#!/usr/bin/tclsh

set var {orange blue red green}
puts [llength $var] 

Когда приведенный выше код выполняется, он дает следующий результат —

4

Элемент списка в указателе

Синтаксис для выбора элемента списка по определенному индексу приведен ниже —

lindex listname index

Пример для элемента списка в индексе приведен ниже —

Live Demo

#!/usr/bin/tclsh

set var {orange blue red green}
puts [lindex $var  1]

Когда приведенный выше код выполняется, он дает следующий результат —

blue

Вставить элемент в указатель

Синтаксис для вставки элементов списка по определенному индексу приведен ниже.

linsert listname index value1 value2..valuen

Пример для вставки элемента списка по определенному индексу приведен ниже.

Live Demo

#!/usr/bin/tclsh

set var {orange blue red green}
set var [linsert  $var 3 black white]
puts $var

Когда приведенный выше код выполняется, он дает следующий результат —

orange blue red black white green

Заменить предметы по индексам

Синтаксис для замены элементов списка по определенным индексам приведен ниже —

lreplace listname firstindex lastindex value1 value2..valuen

Пример замены элементов списка на конкретные индексы приведен ниже.

Live Demo

#!/usr/bin/tclsh

set var {orange blue red green}
set var [lreplace $var 2 3 black white]
puts $var

Когда приведенный выше код выполняется, он дает следующий результат —

orange blue black white

Установить элемент на индекс

Синтаксис для установки элемента списка по определенному индексу приведен ниже —

lset listname index value 

Пример настройки элемента списка по определенному индексу приведен ниже —

Live Demo

#!/usr/bin/tclsh

set var {orange blue red green}
lset var 0 black 
puts $var

Когда приведенный выше код выполняется, он дает следующий результат —

black blue red green

Преобразовать список в переменные

Синтаксис для копирования значений в переменные приведен ниже —

lassign listname variable1 variable2.. variablen

Пример для преобразования списка в переменные приведен ниже —

Live Demo

#!/usr/bin/tclsh

set var {orange blue red green}
lassign $var colour1 colour2
puts $colour1
puts $colour2

Когда приведенный выше код выполняется, он дает следующий результат —

orange
blue

Сортировка списка

Синтаксис для сортировки списка приведен ниже —

lsort listname

Пример для сортировки списка приведен ниже —

Live Demo

#!/usr/bin/tclsh

set var {orange blue red green}
set var [lsort $var]
puts $var

Когда приведенный выше код выполняется, он дает следующий результат —

blue green orange red

Tcl — словарь

Словарь — это схема сопоставления значений с ключами. Синтаксис для обычного словаря показан ниже —

dict set dictname key value
# or 
dict create dictname key1 value1 key2 value2 .. keyn valuen

Некоторые примеры для создания словаря показаны ниже —

Live Demo

#!/usr/bin/tclsh

dict set colours  colour1 red 
puts $colours
dict set colours  colour2 green
puts $colours

set colours [dict create colour1 "black" colour2 "white"]
puts $colours

Когда приведенный выше код выполняется, он дает следующий результат —

colour1 red
colour1 red colour2 green
colour1 black colour2 white

Размер Дикта

Синтаксис для получения размера dict показан ниже —

[dict size dictname]

Пример для печати размера показан ниже —

Live Demo

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
puts [dict size $colours]

Когда приведенный выше код выполняется, он дает следующий результат —

2

Словарь итерации

Простая итерация словаря для печати ключей и значения словаря показана ниже —

Live Demo

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
foreach item [dict keys $colours] {
   set value [dict get $colours $item]
   puts $value
}

Когда приведенный выше код выполняется, он дает следующий результат —

black
white

Значение для ключа в Dict

Синтаксис для получения значения для ключа в dict показан ниже —

[dict get $dictname $keyname]

Пример для получения значения для ключа приведен ниже —

Live Demo

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set value [dict get $colours colour1]
puts $value

Когда приведенный выше код выполняется, он дает следующий результат —

black

Все ключи в Dict

Синтаксис для получения всех ключей в dict показан ниже —

[dict keys $dictname]

Пример для печати всех ключей показан ниже —

Live Demo

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set keys [dict keys $colours]
puts $keys

Когда приведенный выше код выполняется, он дает следующий результат —

colour1 colour2

Все значения в Dict

Синтаксис для получения всех значений в dict показан ниже —

[dict values $dictname]

Пример для печати всех значений показан ниже —

Live Demo

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set values [dict values $colours]
puts $values

Когда приведенный выше код выполняется, он дает следующий результат —

black white

Ключ существует в Dict

Синтаксис проверки наличия ключа в dict показан ниже —

[dict exists $dictname $key]

Пример проверки, существует ли ключ в dict, показан ниже —

Live Demo

#!/usr/bin/tclsh

set colours [dict create colour1 "black" colour2 "white"]
set result [dict exists $colours colour1]
puts $result

Когда приведенный выше код выполняется, он дает следующий результат —

1

Tcl — Процедуры

Процедуры — это не что иное, как блоки кода с серией команд, которые обеспечивают определенную функциональность многократного использования. Он используется, чтобы избежать повторения одного и того же кода в нескольких местах. Процедуры эквивалентны функциям, используемым во многих языках программирования, и доступны в Tcl с помощью команды proc .

Синтаксис создания простой процедуры показан ниже —

proc procedureName {arguments} {
   body
}

Простой пример процедуры приведен ниже —

Live Demo

#!/usr/bin/tclsh

proc helloWorld {} {
   puts "Hello, World!"
}
helloWorld

Когда приведенный выше код выполняется, он дает следующий результат —

Hello, World!

Процедуры с несколькими аргументами

Пример для процедуры с аргументами показан ниже —

Live Demo

#!/usr/bin/tclsh

proc add {a b} {
   return [expr $a+$b]
}
puts [add 10 30]

Когда приведенный выше код выполняется, он дает следующий результат —

40

Процедуры с переменными аргументами

Пример для процедуры с аргументами показан ниже —

Live Demo

#!/usr/bin/tclsh

proc avg {numbers} {
   set sum 0
   foreach number $numbers {
      set sum  [expr $sum + $number]
   }
   set average [expr $sum/[llength $numbers]]
   return $average
}
puts [avg {70 80 50 60}]
puts [avg {70 80 50 }]

Когда приведенный выше код выполняется, он дает следующий результат —

65
66

Процедуры с аргументами по умолчанию

Аргументы по умолчанию используются для предоставления значений по умолчанию, которые можно использовать, если значение не указано. Пример процедуры с аргументами по умолчанию, которые иногда называют неявными аргументами, показан ниже —

Live Demo

#!/usr/bin/tclsh

proc add {a {b 100} } {
   return [expr $a+$b]
}
puts [add 10 30]
puts [add 10]

Когда приведенный выше код выполняется, он дает следующий результат —

40
110

Рекурсивные процедуры

Пример для рекурсивных процедур показан ниже —

Live Demo

#!/usr/bin/tclsh

proc factorial {number} {
   if {$number <= 1} {
      return 1
   } 
   return [expr $number * [factorial [expr $number - 1]]]

}
puts [factorial 3]
puts [factorial 5]

Когда приведенный выше код выполняется, он дает следующий результат —

6
120

Tcl — Пакеты

Пакеты используются для создания повторно используемых блоков кода. Пакет состоит из набора файлов, которые предоставляют определенные функции. Эта коллекция файлов идентифицируется по имени пакета и может иметь несколько версий одних и тех же файлов. Пакет может быть набором сценариев Tcl, двоичной библиотекой или их комбинацией.

Пакет использует концепцию пространства имен, чтобы избежать конфликта имен переменных и процедур. Узнайте больше в нашем следующем уроке «Пространство имен ».

Создание пакета

Пакет может быть создан с помощью минимум двух файлов. Один файл содержит код пакета. Другой файл содержит индексный файл пакета для объявления вашего пакета.

Список шагов для создания и использования пакета приведен ниже.

ШАГ 1: Создание кода

Создайте код для пакета внутри папки, скажем, HelloWorld. Пусть файл с именем HelloWorld.tcl с кодом, как показано ниже —

# /Users/rajkumar/Desktop/helloworld/HelloWorld.tcl 
# Create the namespace
namespace eval ::HelloWorld {
 
  # Export MyProcedure
  namespace export MyProcedure
 
  # My Variables
   set version 1.0
   set MyDescription "HelloWorld"
 
  # Variable for the path of the script
   variable home [file join [pwd] [file dirname [info script]]]
 
}
 
# Definition of the procedure MyProcedure
proc ::HelloWorld::MyProcedure {} {
   puts $HelloWorld::MyDescription
}

package provide HelloWorld $HelloWorld::version
package require Tcl 8.0

ШАГ 2: Создание индекса пакета

Откройте тцлш. Перейдите в каталог HelloWorld и используйте команду pkg_mkIndex, чтобы создать индексный файл, как показано ниже —

% cd /Users/rajkumar/Desktop/helloworld 
% pkg_mkIndex . *.tcl

ШАГ 3: Добавление каталога в Autopath

Используйте команду lappend, чтобы добавить пакет в глобальный список, как показано ниже —

% lappend auto_path "/Users/rajkumar/Desktop/helloworld"

ШАГ 4: Добавление пакета

Затем добавьте пакет в программу, используя выражение запроса пакета, как показано ниже —

% package require HelloWorld 1.0

ШАГ 5: Процедура вызова

Теперь, когда все настроено, мы можем вызвать нашу процедуру, как показано ниже —

% puts [HelloWorld::MyProcedure]

Вы получите следующий результат —

HelloWorld

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

lappend auto_path "/Users/rajkumar/Desktop/helloworld"
package require HelloWorld 1.0
puts [HelloWorld::MyProcedure]

Вы получите следующий результат —

HelloWorld

Tcl — Пространства имен

Пространство имен — это контейнер для набора идентификаторов, который используется для группировки переменных и процедур. Пространства имен доступны из Tcl версии 8.0. До введения пространств имен существовала единая глобальная область. Теперь с пространствами имен у нас есть дополнительные разделы глобальной области видимости.

Создание пространства имен

Пространства имен создаются с помощью команды namespace . Простой пример создания пространства имен показан ниже —

Live Demo

#!/usr/bin/tclsh

namespace eval MyMath {
  # Create a variable inside the namespace
  variable myResult
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
  set ::MyMath::myResult [expr $a + $b]
}
MyMath::Add 10 23

puts $::MyMath::myResult

Когда приведенный выше код выполняется, он дает следующий результат —

33

В приведенной выше программе вы можете видеть, что есть пространство имен с переменной myResult и процедурой Add. Это позволяет создавать переменные и процедуры с одинаковыми именами в разных пространствах имен.

Вложенные пространства имен

Tcl позволяет вложить пространства имен. Простой пример для вложения пространств имен приведен ниже —

Live Demo

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
}

namespace eval extendedMath {
   # Create a variable inside the namespace
   namespace eval MyMath {
      # Create a variable inside the namespace
      variable myResult
   }
}
set ::MyMath::myResult "test1"
puts $::MyMath::myResult
set ::extendedMath::MyMath::myResult "test2"
puts $::extendedMath::MyMath::myResult

Когда приведенный выше код выполняется, он дает следующий результат —

test1
test2

Импорт и экспорт пространства имен

Вы можете видеть в предыдущих примерах пространства имен, мы используем много операторов разрешения области видимости, и это более сложный в использовании. Мы можем избежать этого, импортируя и экспортируя пространства имен. Пример приведен ниже —

Live Demo

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
   return [expr $a + $b]
}

namespace import MyMath::*
puts [Add 10 30]

Когда приведенный выше код выполняется, он дает следующий результат —

40

Забыть пространство имен

Вы можете удалить импортированное пространство имен, используя подкоманду Forgot. Простой пример показан ниже —

Live Demo

#!/usr/bin/tclsh

namespace eval MyMath {
   # Create a variable inside the namespace
   variable myResult
   namespace export Add
}

# Create procedures inside the namespace
proc MyMath::Add {a b } {  
   return [expr $a + $b]
}
namespace import MyMath::*
puts [Add 10 30]
namespace forget MyMath::*

Когда приведенный выше код выполняется, он дает следующий результат —

40

Tcl — File I / O

Tcl поддерживает обработку файлов с помощью встроенных команд открывать, читать, ставить, получать и закрывать.

Файл представляет собой последовательность байтов, не имеет значения, является ли это текстовым файлом или двоичным файлом.

Открытие файлов

Tcl использует команду open для открытия файлов в Tcl. Синтаксис для открытия файла выглядит следующим образом:

open fileName accessMode

Здесь filename является строковым литералом, который вы будете использовать для именования вашего файла, и accessMode может иметь одно из следующих значений:

Sr.No. Режим и описание
1

р

Открывает существующий текстовый файл для чтения, и файл должен существовать. Этот режим используется по умолчанию, если не указан accessMode.

2

вес

Открывает текстовый файл для записи, если он не существует, то создается новый файл, иначе существующий файл усекается.

3

Открывает текстовый файл для записи в режиме добавления, и файл должен существовать. Здесь ваша программа начнет добавлять содержимое в существующий файл содержимого.

4

г & плюс;

Открывает текстовый файл для чтения и записи как. Файл должен существовать уже.

5

ж & плюс;

Открывает текстовый файл для чтения и записи как. Сначала он обрезает файл до нулевой длины, если он существует, в противном случае создайте файл, если он не существует.

6

плюс;

Открывает текстовый файл для чтения и записи как. Он создает файл, если он не существует. Чтение начнется с самого начала, но запись может быть только добавлена.

р

Открывает существующий текстовый файл для чтения, и файл должен существовать. Этот режим используется по умолчанию, если не указан accessMode.

вес

Открывает текстовый файл для записи, если он не существует, то создается новый файл, иначе существующий файл усекается.

Открывает текстовый файл для записи в режиме добавления, и файл должен существовать. Здесь ваша программа начнет добавлять содержимое в существующий файл содержимого.

г & плюс;

Открывает текстовый файл для чтения и записи как. Файл должен существовать уже.

ж & плюс;

Открывает текстовый файл для чтения и записи как. Сначала он обрезает файл до нулевой длины, если он существует, в противном случае создайте файл, если он не существует.

плюс;

Открывает текстовый файл для чтения и записи как. Он создает файл, если он не существует. Чтение начнется с самого начала, но запись может быть только добавлена.

Закрытие файла

Чтобы закрыть файл, используйте команду закрытия. Синтаксис для закрытия следующий —

close fileName 

Любой файл, который был открыт программой, должен быть закрыт, когда программа заканчивает использовать этот файл. В большинстве случаев файлы не нужно закрывать явно; они закрываются автоматически, когда объекты File автоматически завершаются.

Написание файла

Команда Puts используется для записи в открытый файл.

puts $filename "text to write"

Простой пример записи в файл показан ниже.

#!/usr/bin/tclsh

set fp [open "input.txt" w+]
puts $fp "test"
close $fp

Когда приведенный выше код компилируется и выполняется, он создает новый файл input.txt в каталоге, в котором он был запущен (в рабочем каталоге программы).

Чтение файла

Ниже приводится простая команда для чтения из файла —

set file_data [read $fp]

Полный пример чтения и записи показан ниже —

Live Demo

#!/usr/bin/tclsh

set fp [open "input.txt" w+]
puts $fp "test"
close $fp
set fp [open "input.txt" r]
set file_data [read $fp]
puts $file_data
close $fp

Когда приведенный выше код компилируется и выполняется, он читает файл, созданный в предыдущем разделе, и выдает следующий результат:

test

Вот еще один пример для чтения файла до конца файла строка за строкой —

Live Demo

#!/usr/bin/tclsh

set fp [open "input.txt" w+]
puts $fp "test\ntest"
close $fp
set fp [open "input.txt" r]

while { [gets $fp data] >= 0 } {
   puts $data
}
close $fp

Когда приведенный выше код компилируется и выполняется, он читает файл, созданный в предыдущем разделе, и выдает следующий результат:

test
test

Tcl — Обработка ошибок

Обработка ошибок в Tcl обеспечивается с помощью команд error и catch . Синтаксис каждой из этих команд показан ниже.

Синтаксис ошибки

error message info code

В приведенном выше синтаксисе команды error сообщение является сообщением об ошибке, информация задается в глобальной переменной errorInfo, а код задается в глобальной переменной errorCode.

Поймать синтаксис

catch script resultVarName

В приведенном выше синтаксисе команды catch сценарий — это код, который должен быть выполнен, а resultVarName — переменная, которая содержит ошибку или результат. Команда catch возвращает 0, если ошибки нет, и 1, если есть ошибка.

Пример простой обработки ошибок показан ниже —

Live Demo

#!/usr/bin/tclsh

proc Div {a b} {
   if {$b == 0} {
      error "Error generated by error" "Info String for error" 401
   } else {
      return [expr $a/$b]
   }
}

if {[catch {puts "Result = [Div 10 0]"} errmsg]} {
   puts "ErrorMsg: $errmsg"
   puts "ErrorCode: $errorCode"
   puts "ErrorInfo:\n$errorInfo\n"
}

if {[catch {puts "Result = [Div 10 2]"} errmsg]} {
   puts "ErrorMsg: $errmsg"
   puts "ErrorCode: $errorCode"
   puts "ErrorInfo:\n$errorInfo\n"
}

Когда приведенный выше код выполняется, он дает следующий результат —

ErrorMsg: Error generated by error
ErrorCode: 401
ErrorInfo:
Info String for error
   (procedure "Div" line 1)
   invoked from within
"Div 10 0"

Result = 5

Как вы можете видеть в приведенном выше примере, мы можем создавать наши собственные сообщения об ошибках. Точно так же можно отловить ошибку, сгенерированную Tcl. Пример показан ниже —

Live Demo

#!/usr/bin/tclsh

catch {set file [open myNonexistingfile.txt]} result
puts "ErrorMsg: $result"
puts "ErrorCode: $errorCode"
puts "ErrorInfo:\n$errorInfo\n"

Когда приведенный выше код выполняется, он дает следующий результат —

ErrorMsg: couldn't open "myNonexistingfile.txt": no such file or directory
ErrorCode: POSIX ENOENT {no such file or directory}
ErrorInfo:
couldn't open "myNonexistingfile.txt": no such file or directory
   while executing
"open myNonexistingfile.txt"

Tcl — встроенные функции

Tcl предоставляет ряд встроенных функций (процедур) для различных операций. Это включает в себя —

Функции для обработки списка .

Функции для обработки строк .

Функции для обработки массива .

Функции для работы со словарем .

Функции для обработки файлового ввода-вывода .

Функции для создания пространств имен и пакетов.

Функции для математических операций.

Функции для работы системы.

Все вышеперечисленное, за исключением математических и системных функций, рассматривается в предыдущих главах. Математика и встроенные функции системы описаны ниже.

Математические функции

Математические функции, доступные в Tcl, перечислены в следующей таблице:

Sr.No. Метод и описание
1

абс арг

Рассчитывает абсолютное значение арг.

2

Acos Arg

Рассчитывает арккозин арг.

3

Асин Арг

Рассчитывает арксинус арг.

4

Атан Арг

Рассчитывает арктангенс арг.

5

atan2 yx

Вычисляет арктангенс фактора его аргументов (у / х).

6

Ceil Arg

Вычисляет наименьшее целое число, большее или равное числу.

7

потому что арг

Рассчитывает косинус арг.

8

Кош Арг

Рассчитывает гиперболический косинус арг.

9

двойной арг

Вычисляет, является ли arg значением с плавающей точкой, возвращает arg, в противном случае преобразует arg в число с плавающей точкой и возвращает преобразованное значение.

10

Exp Arg

Вычисляет экспоненциальную функцию (е возводится в степень аргумента).

11

пол арг

Вычисляет наибольшее целое число, меньшее или равное arg.

12

FMOD XY

Вычисляет остаток с плавающей точкой от деления x на y. Если y равно 0, возвращается ошибка.

13

гипотеза ху

Вычисляет длину гипотенузы прямоугольного треугольника sqrt (x * x + y * y).

14

Int Arg

Вычисляет, является ли arg целочисленным значением той же ширины, что и машинное слово, возвращает arg, в противном случае arg преобразуется в целое число.

15

лог арг

Рассчитывает натуральный логарифм арг.

16

log10 arg

Рассчитывает основание 10 логарифм аргумента.

17

Pow XY

Вычисляет значение x, возведенное в степень y. Если x отрицательно, y должно быть целочисленным значением.

18

рант

Вычисляет псевдослучайное число от 0 до 1.

19

круглый арг

Вычисляет значение arg, округленное до ближайшего целого числа.

20

грешник

Рассчитывает синус арг.

21

синх арг

Рассчитывает гиперболический синус арг.

22

sqrt arg

Рассчитывает квадратный корень из арг. аргумент должен быть положительным.

23

Srand Arg

Вычисляет псевдослучайное число между 0 и 1. Аргумент, который должен быть целым числом, используется для сброса начального числа для генератора случайных чисел rand.

24

Tan Arg

Рассчитывает тангенс арг.

25

Тан Арг

Вычисляет гиперболический тангенс аргумента arg.

26

широкий арг

Вычисляет целочисленное значение шириной не менее 64 бит (по расширению знака, если arg — 32-битное число) для аргумента arg, если оно еще не было.

абс арг

Рассчитывает абсолютное значение арг.

Acos Arg

Рассчитывает арккозин арг.

Асин Арг

Рассчитывает арксинус арг.

Атан Арг

Рассчитывает арктангенс арг.

atan2 yx

Вычисляет арктангенс фактора его аргументов (у / х).

Ceil Arg

Вычисляет наименьшее целое число, большее или равное числу.

потому что арг

Рассчитывает косинус арг.

Кош Арг

Рассчитывает гиперболический косинус арг.

двойной арг

Вычисляет, является ли arg значением с плавающей точкой, возвращает arg, в противном случае преобразует arg в число с плавающей точкой и возвращает преобразованное значение.

Exp Arg

Вычисляет экспоненциальную функцию (е возводится в степень аргумента).

пол арг

Вычисляет наибольшее целое число, меньшее или равное arg.

FMOD XY

Вычисляет остаток с плавающей точкой от деления x на y. Если y равно 0, возвращается ошибка.

гипотеза ху

Вычисляет длину гипотенузы прямоугольного треугольника sqrt (x * x + y * y).

Int Arg

Вычисляет, является ли arg целочисленным значением той же ширины, что и машинное слово, возвращает arg, в противном случае arg преобразуется в целое число.

лог арг

Рассчитывает натуральный логарифм арг.

log10 arg

Рассчитывает основание 10 логарифм аргумента.

Pow XY

Вычисляет значение x, возведенное в степень y. Если x отрицательно, y должно быть целочисленным значением.

рант

Вычисляет псевдослучайное число от 0 до 1.

круглый арг

Вычисляет значение arg, округленное до ближайшего целого числа.

грешник

Рассчитывает синус арг.

синх арг

Рассчитывает гиперболический синус арг.

sqrt arg

Рассчитывает квадратный корень из арг. аргумент должен быть положительным.

Srand Arg

Вычисляет псевдослучайное число между 0 и 1. Аргумент, который должен быть целым числом, используется для сброса начального числа для генератора случайных чисел rand.

Tan Arg

Рассчитывает тангенс арг.

Тан Арг

Вычисляет гиперболический тангенс аргумента arg.

широкий арг

Вычисляет целочисленное значение шириной не менее 64 бит (по расширению знака, если arg — 32-битное число) для аргумента arg, если оно еще не было.

Некоторые примеры использования математических функций приведены ниже —

Live Demo

#!/usr/bin/tclsh

namespace import ::tcl::mathfunc::*
puts [tan 10]
puts [pow 10 2]
puts [ceil 10.34]
puts [hypot 10 20]
puts [srand 45]
puts [log 10]
puts [srand 45]

Когда приведенный выше код выполняется, он дает следующий результат —

0.6483608274590866
100.0
11.0
22.360679774997898
0.0003521866166741525
2.302585092994046
0.0003521866166741525

Системные функции

Важные системные функции в Tcl включают в себя:

  • часы — функция секунд, которая возвращает текущее время в секундах.

  • часы — функция форматирования, которая форматирует секунды в дату и время.

  • clock — функция сканирования, которая сканирует входную строку и преобразует ее в секунды.

  • open — функция, которая используется для открытия файла.

  • exec — функция, которая используется для выполнения системной команды.

  • close — функция, которая используется для закрытия файла.

часы — функция секунд, которая возвращает текущее время в секундах.

часы — функция форматирования, которая форматирует секунды в дату и время.

clock — функция сканирования, которая сканирует входную строку и преобразует ее в секунды.

open — функция, которая используется для открытия файла.

exec — функция, которая используется для выполнения системной команды.

close — функция, которая используется для закрытия файла.

Некоторые примеры вышеуказанных функций перечислены ниже —

#!/usr/bin/tclsh

#get seconds
set currentTime [clock seconds]
puts $currentTime
#get format 
puts "The time is: [clock format $currentTime -format %H:%M:%S]"
puts "The date is: [clock format $currentTime -format %D]"

set date "Jun 15, 2014"
puts [clock scan $date -format {%b %d, %Y}]

puts [exec ls]
puts [exec dir]

set a  [open input.txt]
puts [read $a];
puts $a
close $a

Когда приведенный выше код выполняется, он дает следующий результат —

1402819756
The time is: 03:09:16
The date is: 06/15/2014
1402808400
input.txt
main.tcl
input.txt  main.tcl
This is the file you can use to provide input to your program and later on open
   it inside your program to process the input.

file3

В следующей таблице приведены строки списка, которые можно использовать для форматирования даты и времени.

Sr.No. Формат и описание
1

% в

День в короткой форме, например: Солнце.

2

% A

День в полной форме, например: воскресенье.

3

% б

Месяц в короткой форме.

4

% В

Месяц в полной форме.

5

% d

День месяца

6

% J

Юлианский день года.

7

% м

Месяц в номере.

8

% г

Год из двух цифр.

9

% Y

Год в четыре цифры.

10

%ЧАС

Час в 24 часах.

11

Час в 12 часовых часах.

12

% M

Протокол.

13

% S

Секунды.

14

%п

До или после полудня.

15

% D

Дата в номере, мм / дд / гг.

16

Время в 12 часовых часах.

17

Время в 24 часовых часах без секунд.

18

% Т

Время в 24 часовых часах с секундами.

19

% Z

Название часового пояса, как GMT, IST, EST и так далее.

% в

День в короткой форме, например: Солнце.

% A

День в полной форме, например: воскресенье.

% б

Месяц в короткой форме.

% В

Месяц в полной форме.

% d

День месяца

% J

Юлианский день года.

% м

Месяц в номере.

% г

Год из двух цифр.

% Y

Год в четыре цифры.

%ЧАС

Час в 24 часах.

Час в 12 часовых часах.

% M

Протокол.

% S

Секунды.

%п

До или после полудня.

% D

Дата в номере, мм / дд / гг.

Время в 12 часовых часах.

Время в 24 часовых часах без секунд.

% Т

Время в 24 часовых часах с секундами.

% Z

Название часового пояса, как GMT, IST, EST и так далее.

Tcl — регулярные выражения

Команда «regexp» используется для соответствия регулярному выражению в Tcl. Регулярное выражение — это последовательность символов, которая содержит шаблон поиска. Он состоит из нескольких правил, и следующая таблица объясняет эти правила и их соответствующее использование.

Sr.No. Правило и описание
1

Икс

Полное совпадение.

2

[AZ]

Любая строчная буква от аз.

3

,

Любой персонаж.

4

^

Начальная строка должна совпадать.

5

$

Конечная строка должна совпадать.

6

\ ^

Последовательность люфта для соответствия специальному символу ^. Аналогично вы можете использовать для других символов.

7

()

Добавьте вышеуказанные последовательности в круглые скобки, чтобы сделать регулярное выражение.

8

Икс*

Должно совпадать с 0 или более вхождениями предыдущего x.

9

х & плюс;

Должно совпадать с 1 или более вхождениями предыдущего x.

10

[AZ]?

Должно совпадать с 0 или 1 вхождением предыдущего x.

11

{разряд}

Совпадает точно с цифрами вхождения предыдущего выражения регулярного выражения. Цифра, которая содержит 0-9.

12

{цифра}

Соответствует 3 или более разрядам предыдущего выражения регулярного выражения. Цифра, которая содержит 0-9.

13

{Digit1, digit2}

Вхождения соответствуют диапазону между цифрами 1 и 2 в предыдущем выражении регулярного выражения.

Икс

Полное совпадение.

[AZ]

Любая строчная буква от аз.

,

Любой персонаж.

^

Начальная строка должна совпадать.

$

Конечная строка должна совпадать.

\ ^

Последовательность люфта для соответствия специальному символу ^. Аналогично вы можете использовать для других символов.

()

Добавьте вышеуказанные последовательности в круглые скобки, чтобы сделать регулярное выражение.

Икс*

Должно совпадать с 0 или более вхождениями предыдущего x.

х & плюс;

Должно совпадать с 1 или более вхождениями предыдущего x.

[AZ]?

Должно совпадать с 0 или 1 вхождением предыдущего x.

{разряд}

Совпадает точно с цифрами вхождения предыдущего выражения регулярного выражения. Цифра, которая содержит 0-9.

{цифра}

Соответствует 3 или более разрядам предыдущего выражения регулярного выражения. Цифра, которая содержит 0-9.

{Digit1, digit2}

Вхождения соответствуют диапазону между цифрами 1 и 2 в предыдущем выражении регулярного выражения.

Синтаксис

Синтаксис для регулярных выражений приведен ниже —

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

Здесь регулярное выражение является командой. О дополнительных переключателях мы увидим позже. Шаблоны — это правила, упомянутые ранее. Строка поиска — это фактическая строка, в которой выполняется регулярное выражение. Полное совпадение — это любая переменная, в которой содержится результат сопоставленного результата регулярного выражения. Submatch1 to SubMatchn — это необязательная переменная subMatch, которая содержит результат шаблонов субсовпадений.

Давайте рассмотрим несколько простых примеров, прежде чем углубляться в сложные. Простой пример для строки с любыми алфавитами. При обнаружении любого другого символа в регулярном выражении поиск будет остановлен и возвращен.

Live Demo

#!/usr/bin/tclsh

regexp {([A-Z,a-z]*)} "Tcl Tutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"

Когда приведенный выше код выполняется, он дает следующий результат —

Full Match: Tcl
Sub Match1: Tcl

Несколько шаблонов

В следующем примере показано, как искать несколько шаблонов. Это пример шаблона для любых алфавитов, за которыми следует любой символ, за которым следуют любые алфавиты.

Live Demo

#!/usr/bin/tclsh

regexp {([A-Z,a-z]*).([A-Z,a-z]*)} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Когда приведенный выше код выполняется, он дает следующий результат —

Full Match: Tcl Tutorial
Sub Match1: Tcl
Sub Match2: Tutorial

Ниже показана модифицированная версия приведенного выше кода, показывающая, что подшаблон может содержать несколько шаблонов.

Live Demo

#!/usr/bin/tclsh

regexp {([A-Z,a-z]*.([A-Z,a-z]*))} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Когда приведенный выше код выполняется, он дает следующий результат —

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Переключатели для Regex Command

Список переключателей, доступных в Tcl,

  • nocase — используется для игнорирования регистра

  • индексы — Храните расположение совпадающих подшаблонов вместо совпадающих символов.

  • line — Новая строка, чувствительная к совпадению. Игнорирует символы после новой строки.

  • начальный индекс — устанавливает смещение начала шаблона поиска.

  • Отмечает конец выключателей

nocase — используется для игнорирования регистра

индексы — Храните расположение совпадающих подшаблонов вместо совпадающих символов.

line — Новая строка, чувствительная к совпадению. Игнорирует символы после новой строки.

начальный индекс — устанавливает смещение начала шаблона поиска.

Отмечает конец выключателей

В приведенных выше примерах я намеренно использовал [AZ, az] для всех алфавитов, вы можете легко использовать -nocase вместо того, как показано ниже —

Live Demo

#!/usr/bin/tclsh

regexp -nocase {([A-Z]*.([A-Z]*))} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Когда приведенный выше код выполняется, он дает следующий результат —

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Другой пример использования переключателей показан ниже —

Live Demo

#!/usr/bin/tclsh

regexp -nocase -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"
regexp -nocase -start 4 -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b  
puts "Full Match: $a"
puts "Sub Match1: $b"

Когда приведенный выше код выполняется, он дает следующий результат —

Full Match: Tcl 
Sub Match1: Tcl 
Full Match: Tutorial
Sub Match1: Tutorial

Тк — Обзор

Tk относится к Toolkit и предоставляет кроссплатформенные виджеты GUI, которые помогают вам в создании графического интерфейса пользователя. Он был разработан как расширение языка сценариев Tcl Джоном Оустерхаутом. Tk оставался в разработке независимо от Tcl, причем версии отличались друг от друга, до этого он был синхронизирован с Tcl в v8.0.

Особенности Тк

Это кроссплатформенный с поддержкой операционных систем Linux, Mac OS, Unix и Microsoft Windows.

  • Это открытый источник.
  • Это обеспечивает высокий уровень расширяемости.
  • Это настраиваемо.
  • Это настраивается.
  • Предоставляет большое количество виджетов.
  • Он может использоваться с другими динамическими языками, а не только с Tcl.
  • GUI выглядит одинаково на разных платформах.

Приложения, построенные в Tk

Большие успешные приложения были построены в Tcl / Tk.

  • Пользовательский интерфейс Dashboard Soft
  • Формы GUI для реляционных БД
  • Специальный графический интерфейс для реляционной БД
  • Программно-аппаратный дизайн системы
  • Xtask — Управление задачами
  • Музыковедение с Tcl и Tk
  • Календарное приложение
  • Тк почта
  • ТК Отладчик

Tk — Окружающая среда

Как правило, все Mac и Linux Mac поставляются с предустановленной Tk. В случае, если он недоступен или вам нужна последняя версия, возможно, вам придется установить ее. Windows не поставляется с Tcl / Tk, и вам может потребоваться использовать его конкретный двоичный файл для его установки.

ТЗ Переводчик

Это небольшая программа, которая позволяет вам вводить команды Tk и выполнять их построчно. Он останавливает выполнение файла tcl в случае, если он сталкивается с ошибкой, в отличие от компилятора, который выполняется полностью.

Давайте создадим файл helloWorld.tcl следующим образом. Мы будем использовать это в качестве первой программы, работающей на выбранной вами платформе.

#!/usr/bin/wish

grid [ttk::button .mybutton -text "Hello World"] 

В следующем разделе объясняется только, как установить Tcl / Tk на каждую из доступных платформ.

Установка на Windows

Загрузите последнюю версию для установщика Windows из списка доступных двоичных файлов Active Tcl / Tk. Активная версия сообщества Tcl / Tk бесплатна для личного использования.

Запустите загруженный исполняемый файл, чтобы установить Tcl и Tk, что можно сделать, следуя инструкциям на экране.

Теперь мы можем построить и запустить файл Tcl, скажем helloWorld.tcl, переключившись на папку, содержащую файл, используя cd, а затем выполнив следующий шаг —

C:\Tcl> wish helloWorld.tcl

Нажмите ввод, и мы увидим вывод, как показано ниже —

Привет Мир Windows

Установка в Linux

Большинство операционных систем Linux поставляется со встроенным Tk, и вы можете сразу же начать работу в этих системах. В случае, если он недоступен, вы можете использовать следующую команду для загрузки и установки Tcl-Tk.

$ yum install tcl tk

Теперь мы можем создать и запустить файл Tcl, скажем helloWorld.tcl, переключившись на папку, содержащую файл, с помощью команды cd, а затем выполнив следующий шаг —

$ wish helloWorld.tcl

Нажмите ввод, и мы увидим вывод, похожий на следующий —

Привет, мир

Установка в системах на основе Debian

В случае, если он недоступен в вашей операционной системе, вы можете использовать следующую команду для загрузки и установки Tcl-Tk —

$ sudo apt-get install tcl tk

Теперь мы можем создать и запустить файл Tcl, скажем helloWorld.tcl, переключившись на папку, содержащую файл, с помощью команды cd, а затем выполнив следующие шаги:

$ wish helloWorld.tcl

Нажмите ввод, и мы увидим вывод, похожий на следующий —

Привет, мир

Установка в Mac OS X

Загрузите последнюю версию пакета для Mac OS X из списка доступных двоичных файлов Active Tcl / Tk. Active Tcl Community Edition является бесплатной для личного использования.

Запустите загруженный исполняемый файл, чтобы установить Active Tcl, что можно сделать, следуя инструкциям на экране.

Теперь мы можем создать и запустить файл Tcl, скажем helloWorld.tcl, переключившись на папку, содержащую файл, с помощью команды cd, а затем выполнив следующий шаг —

$ wish helloWorld.tcl

Нажмите ввод, и мы увидим вывод, как показано ниже —

Привет, мир

Установка из исходных файлов

Вы можете использовать опцию установки из исходных файлов, когда двоичный пакет недоступен. Обычно предпочтительно использовать двоичные файлы Tk для Windows и Mac OS X, поэтому ниже показана только компиляция исходных текстов в системе на основе Unix —

  • Загрузите исходные файлы.

  • Теперь используйте следующие команды для извлечения, компиляции и сборки после переключения в загруженную папку.

Загрузите исходные файлы.

Теперь используйте следующие команды для извлечения, компиляции и сборки после переключения в загруженную папку.

$ tar zxf tk8.6.1-src.tar.gz
$ cd tcl8.6.1
$ cd unix
$ ./configure with-tcl=../../tcl8.6.1/unix prefix=/opt enable-gcc
$ make
$ sudo make install

Примечание. Убедитесь, что вы изменили имя файла на версию, загруженную по командам 1 и 2, указанным выше.

Tk — специальные переменные

В Tk мы классифицируем некоторые переменные как специальные переменные, и они имеют предопределенное использование / функциональность. Список специальных переменных приведен ниже.

Sr.No. Специальная переменная и описание
1

tk_library

Используется для настройки расположения стандартных библиотек Tk.

2

tk_patchLevel

Относится к текущему уровню патча интерпретатора Tk.

3

tk_strictMotif

Когда он не равен нулю, Tk старается придерживаться стиля и стиля Motif как можно ближе.

4

tk_version

Отображает версию Tk.

tk_library

Используется для настройки расположения стандартных библиотек Tk.

tk_patchLevel

Относится к текущему уровню патча интерпретатора Tk.

tk_strictMotif

Когда он не равен нулю, Tk старается придерживаться стиля и стиля Motif как можно ближе.

tk_version

Отображает версию Tk.

Указанные выше специальные переменные имеют свои особые значения для интерпретатора Tk.

Примеры использования специальных переменных Tk

Давайте посмотрим примеры для специальных переменных.

ТК ВЕРСИЯ

#!/usr/bin/wish

puts $tk_version

Когда вы запустите программу, вы получите похожий вывод, как показано ниже.

8.5

TK БИБЛИОТЕКА ПУТЬ

#!/usr/bin/wish

puts $tk_library

Когда вы запустите программу, вы получите похожий вывод, как показано ниже.

/Library/Frameworks/Tk.framework/Versions/8.6/Resources/Scripts

TK PATCH LEVEL

#!/usr/bin/wish

puts $tk_patchLevel

Когда вы запустите программу, вы получите похожий вывод, как показано ниже.

8.6.1

ТК СТРИКТМОТИФ

#!/usr/bin/wish

puts $tk_strictMotif

Когда вы запустите программу, вы получите похожий вывод, как показано ниже.

0

Tk — Обзор виджетов

Основной компонент приложения на основе Tk называется виджетом. Компонент также иногда называют окном, поскольку в Tk «окно» и «виджет» часто используются взаимозаменяемо. Tk — это пакет, который предоставляет богатый набор графических компонентов для создания графических приложений с Tcl.

Tk предоставляет широкий спектр виджетов, начиная от основных графических виджетов, таких как кнопки и меню, и заканчивая виджетами отображения данных. Виджеты очень настраиваемы, так как имеют конфигурации по умолчанию, что делает их простыми в использовании.

Приложения Tk следуют иерархии виджетов, где любое количество виджетов может быть размещено в другом виджете, а эти виджеты — в другом виджете. Основной виджет в программе Tk называется корневым виджетом и может быть создан путем создания нового экземпляра класса TkRoot.

Создание виджета

Синтаксис для создания виджета приведен ниже.

type variableName arguments options

Тип здесь относится к типу виджета, такому как кнопка, метка и т. Д. Аргументы могут быть необязательными и обязательными в зависимости от индивидуального синтаксиса каждого виджета. Параметры варьируются от размера до форматирования каждого компонента.

Соглашение об именовании виджетов

Виджет использует структуру, аналогичную именованию пакетов. В Tk корневое окно именуется точкой (.) И элементом в окне, например кнопка называется .myButton1. Имя переменной должно начинаться со строчной буквы, цифры или знака пунктуации (кроме точки). После первого символа другие символы могут быть прописными или строчными буквами, цифрами или знаками препинания (кроме точек). Рекомендуется использовать строчную букву, чтобы начать метку.

Соглашение о присвоении цветов

Цвета могут быть объявлены с использованием имени, такого как красный, зеленый и т. Д. Он также может использовать шестнадцатеричное представление с #. Количество шестнадцатеричных цифр может быть 3, 6, 9 или 12.

Конвенция по измерениям

Единицей по умолчанию являются пиксели, и она используется, когда мы не указываем размер. Другие размеры: i для дюймов, m для миллиметров, c для сантиметров и p для точек.

Общие параметры

Существует так много общих параметров, доступных для всех виджетов, и они перечислены ниже в следующей таблице:

Sr.No. Синтаксис и описание
1

-фоновый цвет

Используется для установки цвета фона для виджета.

2

ширина полосы

Используется для рисования с рамкой в ​​3D-эффектах.

3

-font fontDescriptor

Используется для установки шрифта для виджета.

4

цвет переднего плана

Используется для установки цвета переднего плана для виджета.

5

высот

Используется для установки высоты для виджета.

6

-светлый фоновый цвет

Используется для установки цветного прямоугольника для рисования вокруг виджета, когда виджет не имеет фокуса ввода.

7

-светлый цвет

Используется для установки цветного прямоугольника для рисования вокруг виджета, когда виджет имеет фокус ввода.

8

-адрес номер

Устанавливает padx для виджета.

9

-падый номер

Устанавливает пади для виджета.

10

состояние

Устанавливает 3D рельеф для этого виджета. Условие может быть приподнятым, утопленным, плоским, ребристым, твердым или желобчатым.

11

текст

Устанавливает текст для виджета.

12

-textvariable varName

Переменная, связанная с виджетом. Когда текст виджета изменяется, переменная устанавливается с текстом виджета.

13

номер

Устанавливает ширину для виджета.

-фоновый цвет

Используется для установки цвета фона для виджета.

ширина полосы

Используется для рисования с рамкой в ​​3D-эффектах.

-font fontDescriptor

Используется для установки шрифта для виджета.

цвет переднего плана

Используется для установки цвета переднего плана для виджета.

высот

Используется для установки высоты для виджета.

-светлый фоновый цвет

Используется для установки цветного прямоугольника для рисования вокруг виджета, когда виджет не имеет фокуса ввода.

-светлый цвет

Используется для установки цветного прямоугольника для рисования вокруг виджета, когда виджет имеет фокус ввода.

-адрес номер

Устанавливает padx для виджета.

-падый номер

Устанавливает пади для виджета.

состояние

Устанавливает 3D рельеф для этого виджета. Условие может быть приподнятым, утопленным, плоским, ребристым, твердым или желобчатым.

текст

Устанавливает текст для виджета.

-textvariable varName

Переменная, связанная с виджетом. Когда текст виджета изменяется, переменная устанавливается с текстом виджета.

номер

Устанавливает ширину для виджета.

Простой пример для вариантов показан ниже.

#!/usr/bin/wish

grid [label .myLabel -background red -text "Hello World" -relief ridge -borderwidth 3]
   -padx 100 -pady 100

Когда мы запустим вышеуказанную программу, мы получим следующий вывод.

Hello World Options

Список доступных виджетов категоризирован ниже —

Основные виджеты

Sr.No. Виджет и описание
1

этикетка

Виджет для отображения одной строки текста.

2

кнопка

Виджет, который кликабелен и запускает действие.

3

запись

Виджет раньше принимал одну строку текста в качестве ввода.

4

Сообщение

Виджет для отображения нескольких строк текста.

5

Текст

Виджет для отображения и при необходимости редактирования нескольких строк текста.

6

Верхний уровень

Окно со всеми границами и украшениями, предоставляемыми менеджером окон.

этикетка

Виджет для отображения одной строки текста.

кнопка

Виджет, который кликабелен и запускает действие.

запись

Виджет раньше принимал одну строку текста в качестве ввода.

Сообщение

Виджет для отображения нескольких строк текста.

Текст

Виджет для отображения и при необходимости редактирования нескольких строк текста.

Верхний уровень

Окно со всеми границами и украшениями, предоставляемыми менеджером окон.

Виджеты макетов

Sr.No. Виджет и описание
1

Рамка

Контейнерный виджет для хранения других виджетов.

2

Место

Виджет для хранения других виджетов в определенном месте с координатами его происхождения и точного размера.

3

пак

Простой виджет для организации виджетов по блокам перед размещением их в родительском виджете.

4

сетка

Виджет для размещения упаковки виджетов в разных направлениях.

Рамка

Контейнерный виджет для хранения других виджетов.

Место

Виджет для хранения других виджетов в определенном месте с координатами его происхождения и точного размера.

пак

Простой виджет для организации виджетов по блокам перед размещением их в родительском виджете.

сетка

Виджет для размещения упаковки виджетов в разных направлениях.

Выбор виджетов

Sr.No. Виджет и описание
1

Переключатель

Виджет, который имеет набор кнопок включения / выключения и метки, одна из которых может быть выбрана.

2

Checkbutton

Виджет, который имеет набор кнопок включения / выключения и метки, многие из которых могут быть выбраны ..

3

Меню

Виджет, который выступает в качестве держателя для пунктов меню.

4

Listbox

Виджет, который отображает список ячеек, одну или несколько из которых можно выбрать.

Переключатель

Виджет, который имеет набор кнопок включения / выключения и метки, одна из которых может быть выбрана.

Checkbutton

Виджет, который имеет набор кнопок включения / выключения и метки, многие из которых могут быть выбраны ..

Меню

Виджет, который выступает в качестве держателя для пунктов меню.

Listbox

Виджет, который отображает список ячеек, одну или несколько из которых можно выбрать.

Мега Виджеты

Sr.No. Виджет и описание
1

диалог

Виджет для отображения диалоговых окон.

2

со счётчиком

Виджет, который позволяет пользователям выбирать номера.

3

Поле со списком

Виджет, который сочетает в себе запись со списком вариантов, доступных для использования.

4

Ноутбук

Виджет с вкладками, который помогает переключаться между одной из нескольких страниц, используя вкладку указателя.

5

Индикатор

Виджет для визуальной обратной связи с ходом длительной операции, такой как загрузка файла.

6

В виде дерева

Виджет для отображения и позволяет просматривать иерархию элементов более в виде дерева.

7

Полоса прокрутки

Прокрутка виджетов без текстовых или холст виджетов.

8

Масштаб

Масштабируйте виджет, чтобы выбрать числовое значение с помощью ползунков.

диалог

Виджет для отображения диалоговых окон.

со счётчиком

Виджет, который позволяет пользователям выбирать номера.

Поле со списком

Виджет, который сочетает в себе запись со списком вариантов, доступных для использования.

Ноутбук

Виджет с вкладками, который помогает переключаться между одной из нескольких страниц, используя вкладку указателя.

Индикатор

Виджет для визуальной обратной связи с ходом длительной операции, такой как загрузка файла.

В виде дерева

Виджет для отображения и позволяет просматривать иерархию элементов более в виде дерева.

Полоса прокрутки

Прокрутка виджетов без текстовых или холст виджетов.

Масштаб

Масштабируйте виджет, чтобы выбрать числовое значение с помощью ползунков.

Другие виджеты

Sr.No. Виджет и описание
1

холст

Рисование виджета для отображения графики и изображений.

холст

Рисование виджета для отображения графики и изображений.

Мы рассмотрим каждый из этих виджетов в следующих главах.

Tk — Основные виджеты

Базовые виджеты — это обычные виджеты, доступные практически во всех приложениях Tk. Список доступных основных виджетов приведен ниже —

Sr.No. Виджеты и описание
1 этикетка

Виджет для отображения одной строки текста.

2 кнопка

Виджет, который кликабелен и запускает действие.

3 запись

Виджет раньше принимал одну строку текста в качестве ввода.

4 Сообщение

Виджет для отображения нескольких строк текста.

5 Текст

Виджет для отображения и при необходимости редактирования нескольких строк текста.

6 Верхний уровень

Виджет используется для создания фрейма, который является новым окном верхнего уровня.

Виджет для отображения одной строки текста.

Виджет, который кликабелен и запускает действие.

Виджет раньше принимал одну строку текста в качестве ввода.

Виджет для отображения нескольких строк текста.

Виджет для отображения и при необходимости редактирования нескольких строк текста.

Виджет используется для создания фрейма, который является новым окном верхнего уровня.

Простой пример Tk показан ниже с использованием основных виджетов —

#!/usr/bin/wish

grid [label .myLabel -text "Label Widget" -textvariable labelText] 
grid [text .myText -width 20 -height 5]
.myText insert 1.0 "Text\nWidget\n"
grid [entry .myEntry -text "Entry Widget"]
grid [message .myMessage -background red -foreground white -text "Message\nWidget"]
grid [button .myButton1  -text "Button" -command "set labelText clicked"]

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Пример базовых виджетов

Tk — Виджеты макета

Виджеты макетов используются для обработки макетов для приложения Tk. Виджет фрейма используется для группировки других виджетов, а менеджер мест, пакетов и сетки — это менеджер компоновки, чтобы дать вам полный контроль над добавлением в окна. Список доступных виджетов макета показан ниже:

Sr.No. Виджеты и описание
1 Рамка

Контейнерный виджет для хранения других виджетов.

2 Место

Виджет для хранения других виджетов в определенном месте с координатами его происхождения и точного размера.

3 пак

Простой виджет для организации виджетов по блокам перед размещением их в родительском виджете.

4 сетка

Виджет для размещения упаковки виджетов в разных направлениях.

Контейнерный виджет для хранения других виджетов.

Виджет для хранения других виджетов в определенном месте с координатами его происхождения и точного размера.

Простой виджет для организации виджетов по блокам перед размещением их в родительском виджете.

Виджет для размещения упаковки виджетов в разных направлениях.

Простой пример Tk показан ниже для виджетов макета —

#!/usr/bin/wish

frame .myFrame1 -background red  -relief ridge -borderwidth 8 -padx 10 -pady 10
   -height 100 -width 100
frame .myFrame2 -background blue  -relief ridge -borderwidth 8 -padx 10 -pady 10
   -height 100 -width 50
pack .myFrame1 
pack .myFrame2

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Пример виджета кадра

Tk — Выбор виджетов

Виджеты выбора используются для выбора различных параметров в приложении Tk. Список доступных виджетов выбора показан ниже.

Sr.No. Виджеты и описание
1 Переключатель

Виджет, который имеет набор кнопок включения / выключения и метки, одна из которых может быть выбрана.

2 Checkbutton

Виджет, который имеет набор кнопок включения / выключения и метки, многие из которых могут быть выбраны.

3 Меню

Виджет, который выступает в качестве держателя для пунктов меню.

4 Listbox

Виджет, который отображает список ячеек, одну или несколько из которых можно выбрать.

Виджет, который имеет набор кнопок включения / выключения и метки, одна из которых может быть выбрана.

Виджет, который имеет набор кнопок включения / выключения и метки, многие из которых могут быть выбраны.

Виджет, который выступает в качестве держателя для пунктов меню.

Виджет, который отображает список ячеек, одну или несколько из которых можно выбрать.

Простой пример Tk показан ниже с использованием виджетов выбора —

#!/usr/bin/wish

grid [frame .gender ]
grid [label .label1  -text "Male" -textvariable myLabel1 ] 
grid [radiobutton .gender.maleBtn -text "Male"   -variable gender -value "Male"
   -command "set  myLabel1 Male"] -row 1 -column 2
grid [radiobutton .gender.femaleBtn -text "Female" -variable gender -value "Female"
   -command "set  myLabel1 Female"] -row 1 -column 3
.gender.maleBtn select
grid [label .myLabel2  -text "Range 1 not selected" -textvariable myLabelValue2 ] 
grid [checkbutton .chk1 -text "Range 1" -variable occupied1 -command {if {$occupied1 } {
   set myLabelValue2 {Range 1 selected}
} else {
   set myLabelValue2 {Range 1 not selected}
} }]
proc setLabel {text} {
   .label configure -text $text 
}

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Пример виджета выбора

Tk — Canvas Widgets

Холст используется для предоставления областей рисования. Синтаксис для виджета Canvas показан ниже —

canvas canvasName options

Опции

Параметры, доступные для виджета Canvas, перечислены ниже в следующей таблице:

Sr.No. Синтаксис и описание
1

-фоновый цвет

Используется для установки цвета фона для виджета.

2

-близкое расстояние

Устанавливает близость курсора мыши к отображаемому элементу. По умолчанию 1,0 пиксель. Это значение может быть дробным и должно быть положительным.

3

-scrollregion boundingBox

Ограничительная рамка для общей площади этого холста.

4

высот

Используется для установки высоты для виджета.

5

номер

Устанавливает ширину для виджета.

6

-xscrollincrement размер

Количество для горизонтальной прокрутки при запросе прокрутки.

7

размер

Количество для вертикальной прокрутки при запросе прокрутки.

-фоновый цвет

Используется для установки цвета фона для виджета.

-близкое расстояние

Устанавливает близость курсора мыши к отображаемому элементу. По умолчанию 1,0 пиксель. Это значение может быть дробным и должно быть положительным.

-scrollregion boundingBox

Ограничительная рамка для общей площади этого холста.

высот

Используется для установки высоты для виджета.

номер

Устанавливает ширину для виджета.

-xscrollincrement размер

Количество для горизонтальной прокрутки при запросе прокрутки.

размер

Количество для вертикальной прокрутки при запросе прокрутки.

Простой пример для виджета Canvas показан ниже —

#!/usr/bin/wish

canvas .myCanvas -background red -width 100 -height 100 
pack .myCanvas

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Пример виджета Canvas

Виджеты для рисования на холсте

Список доступных виджетов для рисования на холсте приведен ниже —

Sr.No. Виджет и описание
1 Линия

Рисует линию.

2 дуга

Рисует дугу.

3 Прямоугольник

Рисует прямоугольник.

4 овальный

Рисует овал.

5 многоугольник

Рисует многоугольник.

6 Текст

Рисует текст.

7 Битовая карта

Рисует растровое изображение.

8 Образ

Рисует изображение.

Рисует линию.

Рисует дугу.

Рисует прямоугольник.

Рисует овал.

Рисует многоугольник.

Рисует текст.

Рисует растровое изображение.

Рисует изображение.

Пример использования различных виджетов Canvas показан ниже —

#!/usr/bin/wish

canvas .myCanvas -background red -width 200 -height 200 
pack .myCanvas
.myCanvas create arc 10 10 50 50 -fill yellow
.myCanvas create line 10 30 50 50 100 10 -arrow both -fill yellow -smooth true
   -splinesteps 2
.myCanvas create oval 50 50 100 80 -fill yellow
.myCanvas create polygon 50 150 100 80 120 120 100 190 -fill yellow -outline green
.myCanvas create rectangle 150 150 170 170  -fill yellow
.myCanvas create text 170 20 -fill yellow -text "Hello" -font {Helvetica -18 bold}
.myCanvas create bitmap 180 50 -bitmap info

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Canvas Widget Example2

Tk — Мега Виджеты

Мега виджеты включают в себя множество сложных виджетов, которые часто требуются в некоторых крупных приложениях Tk. Список доступных мега виджетов приведен ниже.

Sr.No. Виджет и описание
1 диалог

Виджет для отображения диалоговых окон.

2 со счётчиком

Виджет, который позволяет пользователям выбирать номера.

3 Поле со списком

Виджет, который сочетает в себе запись со списком вариантов, доступных для использования.

4 Ноутбук

Виджет с вкладками, который помогает переключаться между одной из нескольких страниц, используя вкладку указателя.

5 Индикатор

Виджет для визуальной обратной связи с ходом длительной операции, такой как загрузка файла.

6 В виде дерева

Виджет для отображения и позволяет просматривать иерархию элементов более в виде дерева.

7 Полоса прокрутки

Прокрутка виджетов без текстовых или холст виджетов.

8 Масштаб

Масштабируйте виджет, чтобы выбрать числовое значение с помощью ползунков.

Виджет для отображения диалоговых окон.

Виджет, который позволяет пользователям выбирать номера.

Виджет, который сочетает в себе запись со списком вариантов, доступных для использования.

Виджет с вкладками, который помогает переключаться между одной из нескольких страниц, используя вкладку указателя.

Виджет для визуальной обратной связи с ходом длительной операции, такой как загрузка файла.

Виджет для отображения и позволяет просматривать иерархию элементов более в виде дерева.

Прокрутка виджетов без текстовых или холст виджетов.

Масштабируйте виджет, чтобы выбрать числовое значение с помощью ползунков.

Простой пример Tk показан ниже с использованием нескольких мега-виджетов.

#!/usr/bin/wish

ttk::treeview .tree -columns "Creator Year" -displaycolumns "Year Creator" 
.tree heading Creator -text "Creator" -anchor center
.tree heading Year -text "Year" -anchor center
pack .tree
.tree insert {} end -id Languages -text "Languages"
.tree insert Languages end -text C -values [list "Dennis Ritchie" "1990"]
proc scaleMe {mywidget scaleValue} {
	$mywidget configure -length $scaleValue
} 
pack [scale .s2  -from 100.0 -to 200.0 -length 100 -background yellow -borderwidth 5
   -font{Helvetica -18 bold} -foreground red -width 40 -relief ridge -orien horizontal
   -variable a -command "scaleMe .s2" ]
pack [ttk::progressbar .p1 -orient horizontal -length 200 -mode indeterminate -value 90]
pack [ttk::progressbar .p2 -orient horizontal -length 200 -mode determinate -variable a
   -maximum 75 -value 20]

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Пример Mega Widget

Tk — Шрифты

Есть ряд виджетов, которые поддерживают отображение текста. Большинство из них предоставляет возможность атрибута шрифта. Синтаксис для создания шрифта показан ниже —

font create fontName options

Опции

Параметры, доступные для создания шрифта, перечислены ниже в следующей таблице:

Sr.No. Синтаксис и описание
1

Семейное имя

Название семейства шрифтов.

2

размер номера

Размер шрифта.

3

уровень веса

Вес для шрифта.

Семейное имя

Название семейства шрифтов.

размер номера

Размер шрифта.

уровень веса

Вес для шрифта.

Простой пример создания шрифта показан ниже —

#!/usr/bin/wish

font create myFont -family Helvetica -size 18 -weight bold 
pack [label .myLabel -font myFont -text "Hello World"]

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Пример шрифтов

Чтобы получить все доступные шрифты, мы можем использовать следующую команду —

#!/usr/bin/wish

puts [font families]

Когда мы запустим указанную выше команду, мы получим следующий вывод:

{Abadi MT Condensed Extra Bold} {Abadi MT Condensed Light} {Al Bayan} {Al Nile}
{Al Tarikh} {American Typewriter} {Andale Mono} Arial {Arial Black}
{Arial Hebrew} {Arial Narrow} {Arial Rounded MT Bold} {Arial Unicode MS}
Athelas Avenir {Avenir Next} {Avenir Next Condensed} Ayuthaya Baghdad {Bangla MN}
{Bangla Sangam MN} {Baoli SC} Baskerville {Baskerville Old Face} Batang {Bauhaus 93}
Beirut {Bell MT} {Bernard MT Condensed} BiauKai {Big Caslon} {Book Antiqua}
{Bookman Old Style} {Bookshelf Symbol 7} Braggadocio {Britannic Bold} {Brush Script MT}
Calibri {Calisto MT} Cambria {Cambria Math} Candara Century {Century Gothic}
{Century Schoolbook} Chalkboard {Chalkboard SE} Chalkduster {Charcoal CY} Charter
Cochin {Colonna MT} {Comic Sans MS} Consolas Constantia {Cooper Black} Copperplate
{Copperplate Gothic Bold} {Copperplate Gothic Light} Corbel {Corsiva Hebrew} Courier
{Courier New} {Curlz MT} Damascus {DecoType Naskh} Desdemona {Devanagari MT}
{Devanagari Sangam MN} Didot {DIN Alternate} {DIN Condensed} {Diwan Kufi} {Diwan Thuluth}
{Edwardian Script ITC} {Engravers MT} {Euphemia UCAS} Eurostile Farah Farisi
{Footlight MT Light} {Franklin Gothic Book} {Franklin Gothic Medium}
Futura Gabriola Garamond {GB18030 Bitmap} {Geeza Pro} Geneva {Geneva CY}
Georgia {Gill Sans} {Gill Sans MT} {Gloucester MT Extra Condensed}
{Goudy Old Style} {Gujarati MT} {Gujarati Sangam MN} Gulim GungSeo {Gurmukhi MN}
{Gurmukhi MT} {Gurmukhi Sangam MN} Haettenschweiler {Hannotate SC} {Hannotate TC}
{HanziPen SC} {HanziPen TC} Harrington HeadLineA Hei {Heiti SC} {Heiti TC}
Helvetica {Helvetica CY} {Helvetica Neue} Herculanum {Hiragino Kaku Gothic Pro}
{Hiragino Kaku Gothic ProN} {Hiragino Kaku Gothic Std} {Hiragino Kaku Gothic StdN}
{Hiragino Maru Gothic Pro} {Hiragino Maru Gothic ProN}
{Hiragino Mincho Pro} {Hiragino Mincho ProN} {Hiragino Sans GB}
{Hoefler Text} Impact {Imprint MT Shadow} InaiMathi {Iowan Old Style} Kai Kailasa
{Kaiti SC} {Kaiti TC} {Kannada MN} {Kannada Sangam MN} Kefa {Khmer MN} {Khmer Sangam MN}
{Kino MT} Kokonor Krungthep KufiStandardGK {Lantinghei SC} {Lantinghei TC} {Lao MN}
{Lao Sangam MN} {Libian SC} {LiHei Pro} {LiSong Pro} {Lucida Blackletter} {Lucida Bright}
{Lucida Calligraphy} {Lucida Console} {Lucida Fax} {Lucida Grande} {Lucida Handwriting}
{Lucida Sans} {Lucida Sans Typewriter} {Lucida Sans Unicode} {Malayalam MN}
{Malayalam Sangam MN} Marion {Marker Felt} Marlett {Matura MT Script Capitals}
Meiryo Menlo {Microsoft Sans Serif} Mishafi Mistral {Modern No. 20} Monaco {MS Gothic}
{MS Mincho} {MS PGothic} {MS PMincho} {MS Reference Sans Serif} {MS Reference Specialty}
Mshtakan {MT Extra} Muna {Myanmar MN} {Myanmar Sangam MN} Nadeem {Nanum Brush Script}
{Nanum Gothic} {Nanum Myeongjo} {Nanum Pen Script} {New Peninim MT} {News Gothic MT}
Noteworthy Onyx Optima {Oriya MN} {Oriya Sangam MN} Osaka Palatino {Palatino Linotype}
Papyrus PCMyungjo Perpetua {Perpetua Titling MT} PilGi {Plantagenet Cherokee}
Playbill PMingLiU {PT Mono} {PT Sans} {PT Sans Caption} {PT Sans Narrow} {PT Serif}
{PT Serif Caption} Raanana Rockwell {Rockwell Extra Bold} Sana Sathu {Savoye LET}
Seravek Silom SimSun {Sinhala MN} {Sinhala Sangam MN} Skia {Snell Roundhand} {Songti SC}
{Songti TC} Stencil STFangsong STHeiti STIXGeneral STIXIntegralsD STIXIntegralsSm
STIXIntegralsUp STIXIntegralsUpD STIXIntegralsUpSm STIXNonUnicode STIXSizeFiveSym
STIXSizeFourSym STIXSizeOneSym STIXSizeThreeSym STIXSizeTwoSym STIXVariants STKaiti
STSong Superclarendon Symbol Tahoma {Tamil MN} {Tamil Sangam MN} TeamViewer8 {Telugu MN}
{Telugu Sangam MN} Thonburi Times {Times New Roman} {Trebuchet MS} {Tw Cen MT} Verdana
Waseem {Wawati SC} {Wawati TC} Webdings {Weibei SC} {Weibei TC} {Wide Latin} Wingdings
{Wingdings 2} {Wingdings 3} {Xingkai SC} {Yuanti SC} YuGothic YuMincho {Yuppy SC}
{Yuppy TC} {Zapf Dingbats} Zapfino {Apple Braille} {Apple Chancery} {Apple Color Emoji}
{Apple LiGothic} {Apple LiSung} {Apple SD Gothic Neo} {Apple Symbols}
AppleGothic AppleMyungjo {Monotype Corsiva} {Monotype Sorts}

ТК — Изображения

Графический виджет используется для создания и управления изображениями. Синтаксис для создания изображения выглядит следующим образом —

image create type name options

В приведенном выше синтаксисе тип — это фото или растровое изображение, а имя — это идентификатор изображения.

Опции

Параметры, доступные для создания изображения, перечислены ниже в следующей таблице:

Sr.No. Синтаксис и описание
1

-file fileName

Имя имени файла изображения.

2

высот

Используется для установки высоты для виджета.

3

номер

Устанавливает ширину для виджета.

4

строка данных

Изображение в кодированной строке base 64.

-file fileName

Имя имени файла изображения.

высот

Используется для установки высоты для виджета.

номер

Устанавливает ширину для виджета.

строка данных

Изображение в кодированной строке base 64.

Простой пример для виджета изображения показан ниже —

#!/usr/bin/wish

image create photo imgobj -file "/Users/rajkumar/Desktop/F Drive/pictur/vb/Forests/
   680049.png" -width 400 -height 400 
pack [label .myLabel]
.myLabel configure -image imgobj 

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Пример изображения

Доступные функции для изображения перечислены ниже в следующей таблице —

Sr.No. Синтаксис и описание
1

изображение удалить imageName

Удаляет изображение из памяти и связанных виджетов визуально.

2

высота изображения imageName

Возвращает высоту для изображения.

3

ширина изображения

Возвращает ширину для изображения.

4

тип изображения imageName

Возвращает тип для изображения.

5

имена изображений

Возвращает список изображений, живущих в памяти.

изображение удалить imageName

Удаляет изображение из памяти и связанных виджетов визуально.

высота изображения imageName

Возвращает высоту для изображения.

ширина изображения

Возвращает ширину для изображения.

тип изображения imageName

Возвращает тип для изображения.

имена изображений

Возвращает список изображений, живущих в памяти.

Простой пример использования вышеуказанных команд графического виджета показан ниже —

#!/usr/bin/wish

image create photo imgobj -file "/Users/rajkumar/images/680049.png"
   -width 400 -height 400 
pack [label .myLabel]
.myLabel configure -image imgobj
puts [image height imgobj]
puts [image width imgobj]
puts [image type imgobj]
puts [image names]
image delete imgobj

Изображение будет удалено визуально и из памяти после выполнения команды «image delete imgobj». В консоли вывод будет выглядеть следующим образом:

400
400
photo
imgobj ::tk::icons::information ::tk::icons::error ::tk::icons::
warning ::tk::icons::question

Tk — События

События в простейшем виде обрабатываются с помощью команд. Простой пример обработки события — обработка события кнопкой и показан ниже:

#!/usr/bin/wish

proc myEvent { } {
   puts "Event triggered"
}
pack [button .myButton1  -text "Button 1"   -command myEvent]

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Пример события

Простая программа для отображения события задержки текстовой анимации показана ниже —

#!/usr/bin/wish

proc delay {} {
   for {set j 0} {$j < 100000} {incr j} {} 
}

label .myLabel -text "Hello................" -width 25
pack .myLabel
set str "Hello................"
for {set i [string length $str]} {$i > -2} {set i [expr $i-1]} {
   .myLabel configure -text [string range $str 0 $i]
   update
   delay
}

Когда мы запустим программу, мы получим следующий вывод в анимированном виде —

Пример события3

Событие после задержки

Синтаксис для события после задержки показан ниже —

after milliseconds number command

Простая программа для отображения после события задержки показана ниже —

#!/usr/bin/wish

proc addText {} {
   label .myLabel -text "Hello................" -width 25
   pack .myLabel
}
after 1000 addText

Когда мы запустим программу, через одну секунду мы получим следующий вывод:

Пример события2

Вы можете отменить событие, используя команду после отмены, как показано ниже —

#!/usr/bin/wish

proc addText {} {
   label .myLabel -text "Hello................" -width 25
   pack .myLabel
}
after 1000 addText
after cancel addText

Привязка событий

Синтаксис для привязки событий, как показано ниже —

bind arguments 

Пример событий клавиатуры

#!/usr/bin/wish

bind .  {puts "Key Pressed: %K "}

Когда мы запустим программу и нажмем букву X, мы получим следующий вывод:

Key Pressed: X 

Пример событий мыши

#!/usr/bin/wish

bind .  {puts "Button %b Pressed : %x %y "}

Когда мы запустим программу и нажмем левую кнопку мыши, мы получим вывод, подобный следующему:

Button 1 Pressed : 89 90 

Пример привязки событий с помощью кнопки

#!/usr/bin/wish

proc myEvent { } {
   puts "Event triggered"
}
pack [button .myButton1  -text "Button 1"   -command myEvent]
bind .  ".myButton1 invoke"

Когда мы запустим программу и нажмем ввод, мы получим следующий вывод:

Event triggered

Tk — Windows Manager

Диспетчер окон используется для обработки окна верхнего уровня. Это помогает в управлении размером, положением и другими атрибутами окна. В тк. используется для ссылки на главное окно. Синтаксис для оконной команды показан ниже —

wm option window arguments

Список параметров, доступных для команды Tk wm, показан в следующей таблице:

Sr.No. Синтаксис и описание
1

аспект windowName abcd

Пытается сохранить соотношение ширины / высоты между a / b и c / d.

2

Окно геометрииНаименование геометрииПарамы

Используйте, чтобы установить геометрию для окна.

3

имя окна сетки wh dx dy

Устанавливает размер сетки.

4

группа windowName leaderName

leaderName дает лидер группы связанных окон.

5

deiconify windowName

Приводит экран в нормальное состояние, если его свернуть.

6

iconify windowName

Минимизирует окно.

7

состояние windowName

Возвращает текущее состояние окна.

8

снять имя окна

Разбирает окно и удаляет его детали в памяти.

9

iconbitmap windowName изображение

Устанавливает или возвращает растровое изображение значка.

10

iconPhoto windowName image

Устанавливает или возвращает значок фото.

11

команда windowName commandString

Записывает команду запуска в свойстве WM_COMMAND.

12

аргументы протокола windowName

Зарегистрируйте команду для обработки имени запроса протокола, которое может быть WM_DELETE_WINDOW,

WM_SAVE_YOURSELF,

WM_TAKE_FOCUS. Например: протокол wm.

WM_DELETE_WINDOW Выход.

13

minsize windowName size

Определяет минимальный размер окна.

14

maxsize windowName size

Определяет максимальный размер окна.

15

title windowName titleText

Определяет заголовок окна.

16

Атрибуты subOptions

Доступно множество атрибутов, таких как альфа, полный экран и так далее.

аспект windowName abcd

Пытается сохранить соотношение ширины / высоты между a / b и c / d.

Окно геометрииНаименование геометрииПарамы

Используйте, чтобы установить геометрию для окна.

имя окна сетки wh dx dy

Устанавливает размер сетки.

группа windowName leaderName

leaderName дает лидер группы связанных окон.

deiconify windowName

Приводит экран в нормальное состояние, если его свернуть.

iconify windowName

Минимизирует окно.

состояние windowName

Возвращает текущее состояние окна.

снять имя окна

Разбирает окно и удаляет его детали в памяти.

iconbitmap windowName изображение

Устанавливает или возвращает растровое изображение значка.

iconPhoto windowName image

Устанавливает или возвращает значок фото.

команда windowName commandString

Записывает команду запуска в свойстве WM_COMMAND.

аргументы протокола windowName

Зарегистрируйте команду для обработки имени запроса протокола, которое может быть WM_DELETE_WINDOW,

WM_SAVE_YOURSELF,

WM_TAKE_FOCUS. Например: протокол wm.

WM_DELETE_WINDOW Выход.

minsize windowName size

Определяет минимальный размер окна.

maxsize windowName size

Определяет максимальный размер окна.

title windowName titleText

Определяет заголовок окна.

Атрибуты subOptions

Доступно множество атрибутов, таких как альфа, полный экран и так далее.

Некоторые из приведенных выше команд используются в следующем примере:

#!/usr/bin/wish

wm maxsize . 800 800
wm minsize . 300 300
wm title . "Hello"
wm attributes . -alpha ".90" 
wm geometry . 300x200+100+100

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Оконный менеджер

Как видите, альфа является одним из доступных атрибутов. Список часто используемых подкоманд приведен ниже —

Sr.No. Синтаксис и описание
1

альфа-число

Устанавливает альфа для окна.

2

-полный экран номер

Число может быть 0 для обычного экрана или 1 для полного экрана.

3

верхнее число

Устанавливает или возвращает, является ли окно самым верхним. Значение может быть 0 или 1.

альфа-число

Устанавливает альфа для окна.

-полный экран номер

Число может быть 0 для обычного экрана или 1 для полного экрана.

верхнее число

Устанавливает или возвращает, является ли окно самым верхним. Значение может быть 0 или 1.

Создание окна

Мы можем использовать команду toplevel для создания окна, и пример показан ниже —

#!/usr/bin/wish

toplevel .t

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Window Manager2

Разрушающее Окно

Мы можем использовать команду destroy, чтобы уничтожить окно, и пример показан ниже —

#!/usr/bin/wish

destroy .t

Приведенная выше команда уничтожит окно с именем .t .

ТК — менеджер по геометрии

Менеджер геометрии используется для управления геометрией окна и других фреймов. Мы можем использовать его для обработки положения и размера окна и фреймов. Виджеты макета используются для этой цели.

Расположение и размер

Синтаксис окна позиционирования и размеров показан ниже —

wm geometry . wxh+/-x+/-y

Здесь w относится к ширине, а h относится к высоте. За ним следует знак «+» или «-» с номером, следующим за позицией х на экране. Точно так же следующий знак «+» или «-» с номером относится к позиции y на экране.

Простой пример показан ниже для приведенного выше утверждения -.

#!/usr/bin/wish

wm geometry . 300x200+100+100

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —

Пример GeometryManager1

Сетка Геометрия

Синтаксис для геометрии сетки показан ниже —

grid gridName -column number -row number -columnspan number -rowspan number

Столбец, строка, столбец или строка строк помогает в обеспечении геометрии сетки.

Простой пример показан ниже для приведенного выше утверждения —

#!/usr/bin/wish

frame .myFrame1 -background red  -height 100 -width 100
frame .myFrame2 -background blue -height 100 -width 50
grid .myFrame1 -columnspan 10 -rowspan 10 -sticky w
grid .myFrame2 -column 10 -row 2

Когда мы запустим вышеупомянутую программу, мы получим следующий вывод —