Версия для печати

Архив документации на OpenNet.ru / Раздел "Программирование, языки" (Многостраничная версия)

Документация по Tcl/Tk

Оригинал этой документации расположен на сервере компании FORIN http://www.florin.ru


Содержание

Введение
Стандартные интерпретаторы
Основные понятия и элементы языка Tcl
Рекомендации по программированию на Tcl/Tk
Переводы страниц руководства man на Tcl
Переводы страниц руководства man на Tk
Создание таблиц и действия с ними
Пример программы


ВВЕДЕНИЕ


Cистему программирования Tcl/Tk разработал Джон Аустерхаут в то время, когда он работал в университете Калифорнии в Беркли. Она состоит из языка сценариев Tcl (Tool Command Language) и интерпретатора этого языка.

  

Что такое Tcl?

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

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

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

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

Что такое Tk?

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

Команды Tk создают примитивы и управляют ими, за счет чего программирование графического интерфейса сочетает в себе простоту и возможность тонко управлять деталями. В частности, очень мощные средства ≈ текстовые примитивы и примитивы канвы (canvas). Текстовые примитивы при помощи механизма тегов поддерживают множественные шрифты: разные участки текста могут иметь разный вид и изменять его в зависимости от заданных событий. Примитивы канвы работают с элементами графических изображений, например: линиями, окружностями, дугами, прямоугольниками, овалами, изображениями, и также имеют теги.

Для выполнения Tcl-программы файл со скриптом следует передать интерпретатору. Также ИНТЕРПРЕТАТОР может работать в интерактивном режиме, когда пользователь с клавиатуры вводит команды скрипта в командной строке интерпретатора.

Применяются два стандартных интерпретатора языка: wish и tclsh. ИНТЕРПРЕТАТОР wish обрабатывает команды и процедуры не только Tcl, но и Tk. Поэтому с его помощью можно работать с приложениями, имеющими графический интерфейс пользователя. Другой стандартный ИНТЕРПРЕТАТОР Tcl (tclsh) может обрабатывать только команды Tcl и поэтому с его помощью нельзя создавать программы с графическим интерфейсом. Интерпретаторы Tcl написаны на С.

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

Обычно Tcl-программы выполняет ИНТЕРПРЕТАТОР, поэтому они работают не так быстро, как эквивалентные им программы на С. Для многих приложений это не критично, учитывая большую вычислительную мощность современных микропроцессоров. В тех случаях, когда важна скорость исполнения, можно воспользоваться компилятором Tcl или написать вычислительную часть программы на компилируемом языке, например, С или С++, а интерфейс пользователя написать на Tcl.

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


Все права защищены 1992-1999 DataX/FLORIN, Inc.

Стандартные интерпретаторы

ИНТЕРПРЕТАТОР tclsh ИНТЕРПРЕТАТОР wish Дополнительные возможности

ИНТЕРПРЕТАТОР tclsh

ИНТЕРПРЕТАТОР tclsh представляет собой простую оболочку с алфавитно-цифровым интерфейсом пользователя. ИНТЕРПРЕТАТОР может работать в интерактивном или пакетном режиме. В первом случае он считывает команды Tcl со стандартного входа: пользователь вводит команды с клавиатуры, tclsh обрабатывает их и выводит результат или сообщение об ошибке на стандартный вывод. Во втором случае источником команд для обработки служит указанный дисковый файл. ⌠Интерпретатор■ будет работать до тех пор, пока не будет подана команда exit, или пока на стандартный вход не поступит символ конца файла.
Для запуска интерпретатора необходимо в ответ на приглашение операционной системы подать команду Если никаких аргументов указано не было, то ⌠Интерпретатор■ запустится в интерактивном режиме, изображая на дисплее приглашение для ввода команд в виде знака процента ▒%▓. В ответ на приглашение следует ввести команду Tcl и нажать клавишу Enter. Затем ввести следующую команду и снова нажать Enter.
Если в домашнем каталоге пользователя существует файл .tclshrc, то tclsh обработает этот файл как скрипт Tcl до считывания первой команды со стандартного входа.

Когда tclsh запускается с аргументами, то первый аргумент fileName является именем файла со скриптом, а все последующие необязательные аргументы передаются скрипту в качестве переменных. Вместо того, чтобы считывать команды со стандартного входа, ⌠Интерпретатор■ будет работать в пакетном режиме: считывать их из указанного файла и завершит свою работу по достижении конца файла. В этом случае автоматической обработки файла .tclshrc не делается, но если это необходимо, то можно сослаться на него изнутри файла скрипта.

Tclsh задает следующие переменные Tcl:
 
ИНТЕРПРЕТАТОР wish

ИНТЕРПРЕТАТОР wish представляет собой простую программу с двумя рабочими окнами, главным и выходным. ИНТЕРПРЕТАТОР может работать в интерактивном или пакетном режиме. В первом случае он считывает команды Tcl со стандартного входа: пользователь вводит команды с клавиатуры в главном окне, wish обрабатывает их и выводит результат или сообщение об ошибке в выходном окне.

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

Для запуска интерпретатора необходимо в ответ на приглашение операционной системы подать команду

Если никаких аргументов указано не было, или если первый аргумент начинается с символа ▒-▓, то ⌠Интерпретатор■ запустится в интерактивном режиме, изображая на дисплее приглашение для ввода команд в виде знака процента ▒%▓. В ответ на приглашение следует ввести команду Tcl и нажать клавишу Enter. Затем ввести следующую команду и снова нажать Enter.
Если в домашнем каталоге пользователя существует файл .wishrc, то wish обработает этот файл как скрипт Tcl до считывания первой команды со стандартного входа.
Когда wish запускается с первым аргументом fileName, то аргумент считается именем файла со скриптом. ⌠Интерпретатор■ обработает файл fileName (создающий преимущественно интерфейс пользователя) в пакетном режиме и затем будет откликаться на события до тех пор, пока все окна не будут удалены. Команды со стандартного входа считываться не будут. В этом случае автоматической обработки файла .wishrc не делается, но если это необходимо, то файл скрипта может сослаться на него сам.
Wish ≈ автоматически обработает все необязательные аргументы arg командной строки из нижеприведенного списка. Любые аргументы командной строки не из этого списка передаются скрипту с помощью переменных argc и argv. Имя приложения (используемое для таких целей, как команды send) берется из параметра -name, если он был задан. В противном случае оно берется из fileName, если оно было указано, или из командной строки, вызвавшей wish. В последних двух случаях, если имя содержит символ ▒/▓ (слеш), то только символы после последнего слеша используются в качестве имени приложения.
Класс приложения (используемый для таких целей, как описание параметров при помощи свойства RESOURCE_MANAGER или файла .Xdefaults) совпадает с его именем за исключением первой буквы, которая делается заглавной. Wish ≈ задает следующие переменные Tcl: Эти три переменные выполняют для wish точно такую же роль, какую выполняют одноименные переменные для интерпретатора tclsh.

ДОПОЛНИТЕЛЬНЫЕ  ВОЗМОЖНОСТИ

Интерпретаторы можно запускать не только в режиме командной строки, но также и из скрипта. Также можно изменить вид приглашения (символ ▒%▓).
 

Если создать файл скрипта (этот и следующий примеры даны для интерпретатора tclsh, для wish надо заменить в строках имя tclsh на wish) с первой строкой вида

и пометить файл скрипта, как исполняемый, то будет можно запускать ⌠Интерпретатор■ прямо из оболочки Unix. В этом случае предполагается, что ⌠Интерпретатор■ (tclsh, wish) был установлен в стандартный каталог usr/local/bin; если он был установлен в какое-нибудь иное место, то надо будет откорректировать путь в названной выше строке. При этом эта строка должна удовлетворять возможным требованиями операционной системы Unix на длину строк, начинающихся с #! (не более 30 символов).

Еще удобнее будет начинать файлы со скриптами следующими тремя строками:

Этот второй способ имеет три преимущества перед предыдущим способом: Эти три строчки позволяют обрабатывать скрипт и оболочке sh, и интерпретатору (tclsh или wish) но при этом exec будет запущен только оболочкой sh. Сначала скрипт обрабатывает sh, она считает вторую строку комментарием и исполняет третью строку. Утверждение с exec остановит обработку оболочкой и вместо этого запустит ⌠Интерпретатор■ для повторной обработки всего скрипта.

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

Изменить символ приглашения можно при помощи переменных tcl_prompt1 и tcl_prompt2. Если переменная tcl_prompt1 существует, то она должна содержать скрипт Tcl для вывода приглашения; вместо вывода своего приглашения, ⌠Интерпретатор■ будет исполнять скрипт в tcl_prompt1. Переменная tcl_prompt2 используется аналогичным образом, когда при вводе была начата новая строка, но вводимая команда еще не была закончена. Если переменная tcl_prompt2 не была задана, то для незаконченных команд не будет выводиться никакого приглашения.

Все права защищены 1992-1999 DataX/FLORIN, Inc.

ОСНОВНЫЕ ПОНЯТИЯ И ЭЛЕМЕНТЫ ЯЗЫКА TCL

Общая характеристика языка Tcl/Tk





Язык Tcl/Tk обладает многими свойствами обычных процедурных языков и имеет следующие основные особенности:

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

Способ интерпретации строки Tcl зависит от конкретного интерпретатора, однако существует три общих формы строк: команды, выражения и списки. Ниже эти формы раскрыты более полно.

Основы синтаксиса команд


Синтаксически язык Tcl похож одновременно на оболочки Unix и lisp. Тем не менее, интерпретация (вариант: смысл) команд в Tcl отличается от обоих систем. Команда Tcl состоит из одной или нескольких команд, разделенных символами новой строки или точками с запятой. Каждая команда состоит из набора полей, разделенных пустым промежутком (пробелами или табуляцией). Первое поле должно быть именем команды, а необязательные остальные поля ≈ суть аргументы, передаваемые этой команде. Например, команда

имеет три поля: первое, set, есть имя команды, а остальные два, a и 22, будут переданы в качестве аргументов команде set. Имя команды должно быть именем встроенной команды Tcl, дополнительной команды, созданной для данного приложения процедурой Tcl_CreateCommand, или командной процедурой, определенной с помощью встроенной команды proc. Аргументы передаются текстовыми строками в буквальном смысле. Команды пользуются этими строками так, как им требуется. Например, команда set считает свой первый аргумент именем переменной, а второй ≈ строковым значением для присвоения этой переменной. Другие команды могут считать свои аргументы целыми числами, списками, именами файлов или командами Tcl. Обычно имена команд должны быть напечатаны полностью, без сокращений. В тех случаях, когда интерпретатор Tcl не может узнать имя команды, он вызовет специальную команду по имен    и unknown, которая попытается найти или создать указанную команду. Например, во многих случаях команда unknown будет искать команду в каталогах библиотек и если найдет, то создаст ее в виде процедуры Tcl. Часто команда unknown обеспечивает выполнение команд, заданных сокращенным именем, но обычно только тех, которые поданы в интерактивном режиме работы. Даже если выполнение такой команды обеспечивается, использование сокращенной формы имен команд в командных скриптах и других вещах, которые будут в использовании спустя время, не рекомендуется: изменения в наборах команд последующих версий языка могут привести к неоднозначной интерпретации и вызванными этим ошибками в работе скриптов.
 
Комментарии



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

Группирование аргументов 
с помощью двойных кавычек

Обычно каждое поле аргумента заканчивается последующим пробелом, однако двойные кавычки можно использовать для задания аргументов с пробелами внутри. Если поле аргумента начинается с двойных кавычек, то этот аргумент не будет заканчиваться пробелом (включая символы новой строки) или точкой с запятой (использование точек с запятой описано ниже). Такой аргумент будет заканчиваться только следующим символом двойных кавычек. Символы двойных кавычек не будут входить в значение аргумента. Например, команда

передаст команде set  два аргумента: a и ▒This is a single argument▓. Выполнение подстановок команд, подстановок переменных и подстановок с обратным слешем внутри двойных кавычек будет сохранено. Если первый символ в поле команды не двойные кавычки, тогда при анализе этого поля двойные кавычки не имеют специальной интерпретации.
 

Группирование аргументов 
с помощью фигурных скобок

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

команда  set  получит два аргумента: a и ▒xyz a {b c d}▓. Когда действуют двойные кавычки или фигурные скобки, парная закрывающая скобка или кавычки не должны обязательно быть на той же строке, что и ее открывающая. В этом случае символ новой строки будет включен в поле аргумента вместе со всеми остальными символами до закрывающей скобки или кавычек. Например, команда eval использует один аргумент, представляющий собой строку команды: eval  вызывает ИНТЕРПРЕТАТОР Tcl для выполнения командной строки. Команда присвоит значение ▒22▓ переменной a и значение ▒33▓ ≈ переменной ▒b▓. Если первый символ поля команды ≈ не открывающая фигурная скобка, то ни открывающая, ни закрывающая фигурные скобки в этом поле не будут интерпретироваться специальным образом (кроме случая подстановки переменной, об этом рассказано ниже).
 
 
Подстановка команд со скобками



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

Когда у команды set задан только один аргумент, тогда это есть имя переменной, и set возвращает значение этой переменной. В этом случае, если переменная b имеет значение ▒foo▓, то предыдущая команда эквивалентна команде Квадратные скобки можно использовать более сложными способами. Например, если переменная b имеет значение ▒foo▓, а переменная c имеет значение ▒gorp▓, то команда эквивалентна команде Команда в квадратных скобках может содержать несколько команд, разделенных обычным образом ≈ строками или точками с запятой. В этом случае для подстановки используется значение последней команды. Например, последовательность команд эквивалентна команде Если поле заключено в фигурные скобки, то квадратные скобки и символы между ними не интерпретируются специальным образом, а передаются в аргумент без изменения.
 
 
 
Подстановка переменных с $

Символ доллара ▒$▓ можно использовать в качестве краткой формы для подстановки переменных. Если у аргумента, не заключенного в фигурные скобки, имеется символ ▒$▓, то выполняется подстановка переменной. Символы после ▒$▓ вплоть до первого символа, не являющегося цифрой, буквой или подчеркиванием, считаются именем переменной, и строковое значение этой переменной подставляется вместо ее имени. Например, если переменная foo имеет значение ▒test▓, то команда

эквивалентна команде Существует две специальные формы для подстановки переменных. Если следующим после имени переменной является открывающая скобка, то переменная считается именем массива, и все символы между открывающей скобкой и следующей закрывающей скобкой считаются индексом внутри этого массива. Команды и переменные, используемые в качестве индекса, обрабатывается перед операцией извлечения элемента массива. Например, если переменная x есть массив и один его элемент по имени first имеет значение ▒87▓, а второй по имени 14 ≈ значение ▒more▓, то команда эквивалентна команде Если переменная index имеет значение ▒14▓, то команда эквивалентна команде Более подробно о массивах  .

Вторая специальная форма для переменных имеет место тогда, когда после символа доллара следует открывающая фигурная скобка. В этом случае имя переменной состоит из всех символов, заключенных между фигурными скобками. Ссылки на массив в таком случае невозможны: предполагается, что такое имя есть имя скалярной переменной. Например, если переменная foo имеет значение ▒test▓, то команда

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

Аббревиатура с символом доллара есть просто сокращенная форма: ▒$a▓ полностью эквивалентна ▒[set a]▓ и используется только для удобного сокращения количества печатаемых символов.
 
 

Разделение команд точкой с запятой

Обычно каждая команда занимает одну строчку (команда заканчивается символом новой строки). Символ точки с запятой также считается разделителем команд: можно поместить несколько команд в одной строке, разделив их точками с запятой. Точки с запятой не считаются разделителями команд, если они находятся внутри фигурных скобок или двойных кавычек.
 
 
 

Подстановки с обратным слешем
Обратный слеш можно использовать для ввода непечатаемых символов в поля команд и для вставки специальных символов (например, фигурных скобок или двойных кавычек) в поля без описанной выше специальной интерпретации этих символов. Ниже перечислены различаемые интерпретатором Tcl последовательности с обратным слешем. В каждом случае последовательность с обратным слешем замещается указанным символом: второй аргумент команды setбудет ▒{x[\0yza▓.

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

Если аргумент заключен в фигурные скобки, то последовательности с обратным слешем внутри аргумента будут распознаны, но подстановки не будут выполнены (за исключением пары обратный слеш ≈ новая строка): последовательности с обратным слешем передаются в аргумент как есть, без какой-либо специальной интерпретации символов в последовательностях. В частности, в такой ситуации фигурные скобки не означают поиска соответствующей парной скобки, заканчивающей аргумент. Например, в команде второй аргумент команды set будет ▒\{abc▓.

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

Выражения

Вторая смысловая форма строк в Tcl ≈ это выражения. Несколько команд, таких как expr, for и if, считают один или несколько своих аргументов выражениями и для вычисления их значения вызывают процессоры выражений Tcl (Tcl_ExprLong, Tcl_ExprBoolean, и т.д.). Разрешенные в Tcl выражениях операторы составляют подмножество операторов, разрешенных в выражениях С, и они имеют такой же смысл и приоритет выполнения, как и соответствующие им операторы С. Почти всегда значением выражения является число (целое или с плавающей запятой). Например, выражение

дает результат 14,2. Выражения Tcl отличаются от выражений С способом описания операндов, а также тем, что поддерживают нечисловые операнды и сравнение строк. Выражение Tcl состоит из комбинации операндов, операторов и скобок. Между ними всеми можно ставить пробелы, потому что при вычислении значения пробелы игнорируются. По возможности, все операнды интерпретируются как целые числа, если не задано иное. Целые числа могут иметь вид десятичного числа (обычно), восьмеричного (если первая цифра числа есть 0) или шестнадцатеричного (если первые два символа числа ≈ ). Если операнд не подпадает ни под один из названных форматов, он считается числом с плавающей запятой, если это возможно. Числа с плавающей запятой можно задавать любым из способов, воспринимаемым совместимым с ANSI компилятором С. Исключение составляет запрет в большинстве версий на суффиксы f, F, l, и L. Примеры правильных чисел с плавающей запятой: 2.1, 3., 6e4, 7.91e+16. Если числовая интерпретация невозможна, то операнд считается строковым и работать с ним может только ограниченный набор операторов.

Операнды могут быть заданы одним из следующих способов:

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

  • Еще один способ задания операндов назван в разделе "Встроенные команды Tcl".

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

    В качестве примеров рассмотрим простые выражения, в которых переменная a имеет значение ▒3▓, а значение переменной b есть ▒6▓. Тогда выражение в левой части каждой строки даст значение в ее правой части:

    Третьей основной смысловой формой строк в Tcl являются списки. Список ≈ это обычная строка с подобной списку структурой, состоящей из полей, разделенных промежутками. Например, строка ▒Al Sue Anne John▓ есть список, имеющий четыре элемента (поля). Основная структура списков аналогична структуре командных строк, за исключением того, что символ новой строки служит таким же разделителем, как и пробел с табуляцией. Для списков действуют такие же правила в отношении фигурных скобок, двойных кавычек и обратных слешей, как и для команд. Например, строка есть список из трех элементов: ▒a▓, ▒b c▓ и ▒d e {f g h}▓. Всегда, когда из списка извлекается элемент, действуют те же правила относительно фигурных скобок, двойных кавычек и обратных слешей, что и для команд. Таким образом, когда из списка в примере будет извлечен третий элемент, результат будет ▒d e {f g h}▓ (потому что при извлечении произошло только отбрасывание внешней пары фигурных скобок). В отношении списков никогда не выполняются подстановки команд и переменных (по крайней мере, командами обработки списков: список всегда может быть передан интерпретатору Tcl для обработки).

    Команды Tcl concat, foreach, lappend, lindex, linsert, list, llength, lrange, lreplace, lsearch и lsort позволяют составлять списки, извлекать из них элементы, просматривать содержимое и выполнять прочие относящиеся к спискам функции.
     

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

    Tcl предоставляет две команды для сравнения строк регулярных выражений в стиле egrep: regexp и regsub.

    Регулярное выражение состоит из ни одной или более ветвей (branch), разделенных символом ▒|▓. Оно совпадает с любым выражением, которое совпадает с одной из ветвей.

    Ветвь состоит из одного или более кусков (piece), соединенных друг с другом. Она совпадает с выражением, которое состоит из тождества для первого куска, следом за которым идет тождество для второго куска, и т. д.

    Кусок состоит из атома со следующим за ним необязательным символом ▒*▓, ▒+▓ или ▒?▓. Атом с последующим символом ▒*' совпадает с последовательностью из одного или более тождества для этого атома. Атом с символом ▒+▓ после него совпадает с последовательностью из одного или более тождества для этого атома. Атом с символом ▒?▓ после него совпадает с последовательностью из одного тождества для этого атома или пустой строкой.
     
     

    Атом может быть регулярным выражением в скобках (в этом случае оно совпадает с тождеством для этого регулярного выражения), интервалом (об этом рассказано ниже), символом ▒.▓ (совпадающим с одним любым символом), ▒^▓ (совпадающим с нулевой строкой в начале вводимой строки), ▒$▓ (совпадающим с нулевой строкой в конце вводимой строки), ▒\▓ с последующим одним символом (совпадающим с этим символом), или одним символом без какого-либо иного смысла (совпадающим с этим символом).

    Интервал есть последовательность символов, заключенная в квадратные скобки. Он обычно совпадает с любым символом из этого интервала. Если последовательность начинается с символа ▒^▓, то она совпадает с любым символом не из числа остальных символов. Если два символа в последовательности разделены символом ▒-▓, то это краткая форма для обозначения всех символов между этими двумя (например, ▒[0-9]▓ совпадает с любой десятичной цифрой). Для того, чтобы включить в последовательность символ ▒]▓, следует поставить его на место первого в последовательности (следом за возможным символом ▒^▓). Для включения в последовательность символа ▒-▓ следует сделать его первым или последним символом.

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

    В общем, возможные исходы в списке ветвей рассматриваются слева направо. Исходы для ▒*▓, ▒+▓ и ▒?▓ рассматриваются в порядке убывания длины. Вложенные конструкции рассматриваются извне вовнутрь (from the outermost in), и составленные (concatenated) конструкции рассматриваются слева направо. Будет выбрано то из тождеств, которое будет отвечать самому раннему из исходов в первом выборе. Если предстоит несколько выборов, то следующее сравнение будет сделано таким же образом (самый ранний из исходов), в зависимости от решения при первом выборе, и так далее.

    Например, ▒(ab|f)b*c▓ может совпадать с ▒abc▓ одним из двух способов. Первый выбор делается между ▒ab▓ и ▒a▓; поскольку ▒ab▓ стоит раньше и ведет к успешному совпадению, то оно будет выбрано. Поскольку ▒b▓ уже закрыто, то ▒b*▓ должно совпасть со своим крайним исходом ≈ пустой строкой, чтобы не конфликтовать с предыдущим выбором.

    В частном случае, когда нет ни одного разделителя ветвей ▒|▓ и присутствует только один символ ▒*▓, ▒+▓ или ▒?▓, общий результат будет следующим: будет выбрано самое длинное тождество из всех возможных. Таким образом, сравнение ▒ab*▓ с ▒xabbbby▓ даст результат ▒abbbb▓. Зато если ▒ab*▓ будет сравниваться с ▒xabyabbbz▓, то результатом будет считаться ▒ab▓, находящееся сразу за ▒x▓, в соответствии с правилом первого совпадения из всех возможных. В действительности, решение о том, откуда начинать сравнивать, есть первый выбор, который надо сделать. Этому выбору должны подчиняться последующие шаги, даже они ведут к менее предпочтительному результату.

    Результаты команд

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

    Этот код нормального завершения, возвращается при успешном выполнении команды. Строка содержит возвращаемое командой значение. Указывает на имевшую место ошибку; строка содержит сообщение, описывающее ошибку. Дополнительно к этому, глобальная переменная errorInfo будет содержать словесную информацию о командах и процедурах, выполнявшихся при возникновении ошибки; глобальная переменная errorCode будет содержать машинно-читаемые данные об ошибке, если таковые доступны. Более подробно об этом рассказано в разделе ⌠4.18■. Указывает на то, что была вызвана команда return, и что текущая процедура (или команда верхнего уровня, или команда source) должна немедленно завершиться. Строка содержит возвращаемое значение для процедуры или команды. Указывает на то, что была вызвана команда break, и поэтому самый внутренний цикл должен немедленно прекратиться. Строка должна всегда оставаться пустой. Указывает на то, что была вызвана команда continue, и поэтому самый внутренний цикл должен приступить к следующей итерации. Строка должна всегда оставаться пустой.

    Обычно программистам на Tcl не нужно задумываться о кодах возврата, поскольку почти всегда возвращается TCL_OK. Если команда возвратила что-либо иное, то Интерпретатор Tcl немедленно останавливает обработку команд и возвращается к вызвавшему его событию. Если в некоторый момент имеется несколько вложенных вызовов интерпретатора Tcl, то обычно каждая из вложенных команд вернет ошибку вызывающему ее субъекту, и таким образом сообщение об ошибке достигнет самого верхнего уровня в приложении. После этого приложение выведет пользователю сообщение об ошибке.

    В некоторых случаях отдельные команды обрабатывают ошибочные ситуации сами и не сообщают о них наверх. Например, команда for проверяет наличие кода возврата TCL_BREAK и если находит его, то прекращает выполнение тела цикла и возвращает код TCL_OK вызвавшему субъекту. Также команда forобрабатывает коды TCL_CONTINUE, а Интерпретатор процедур обрабатывает коды TCL_RETURN. Команда catch позволяет программам Tcl перехватывать ошибки и обрабатывать их без последующего прекращения интерпретации команд.
     
     
     

     Процедуры

    Tcl позволяет расширить командный интерфейс за счет определения процедур. Процедуру Tcl можно вызвать для исполнения так же, как и любую другую команду Tcl (у нее есть имя и она получает один или более аргументов). Единственным отличием является то, что она не состоит из кода С, скомпонованного внутрь программы: это строка, содержащая одну или более команд Tcl. Подробнее об определении и вызове процедур рассказано в разделе "Встроенные комнды Tcl" (proc).
     

    В Tcl можно определять переменные и использовать их значения при помощи подстановки переменных с символом ▒$▓, команды set, или нескольких иных механизмов. Нет необходимости специально определять переменные: новая переменная будет автоматически определена сразу же, как только будет использовано новое имя переменной. Tcl поддерживает переменные двух типов: скалярные и массивы (векторные). Скалярная переменная имеет только одно значение в каждый момент времени, тогда как переменная-массив может содержать любое количество элементов, имеющих имя (обычно называемое ⌠индексом⌠) и значение. Индексами массива могут быть произвольные строки, необязательно числового вида. Для ссылки на индексы в командах Tcl используются круглые скобки. Например, команда ▒set x(first) 44▓ изменит значение элемента массива x по имени first на новое: ▒44▓. Двумерные массивы можно имитировать использованием индексов, состоящих из нескольких составленных вместе частей. Например, команды задают элементы массива а с индексами ▒2,3▓ и ▒3,6▓. В общем, элементы массивов можно употреблять везде, где можно употреблять скалярные переменные. Недопустимо наличие скалярной переменной и массива с одним и тем же именем. Нельзя обращаться к скалярной переменной как к элементу массива. Для преобразования скалярной переменной в массив и наоборот следует удалить существующую переменную при помощи команды unset. Команда array предоставляет набор средств для работы с массивами, в том числе получение списка всех элементов массива и просмотр значений элементов по одному. Переменные могут быть локальными или глобальными. Если имя переменной используется тогда, когда не выполняется процедура, то оно автоматически относится к глобальной переменной. Имена переменных, используемых внутри процедуры, обычно ссылаются на локальные переменные, ассоциированные с данным выполнением этой процедуры. Локальные переменные удаляются по окончании работы процедуры. При выполнении процедуры для указания на то, что имя является именем глобальной переменной, может использоваться команда global (она в некотором смысле аналогична extern в С).
     
     
     

    Встроенные команды

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

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

    env


     
     

    errorCode

    errorInfo
    Все права защищены 1992-1997 DataX/FLORIN, Inc.

    Встроенные команды Tcl

    Http
    SafeTcl
    Tcl
    after
    append
    array
    bgerror
    binary
    break
    case
    catch
    cd
    clock
    close
    concat
    continue
    eof
    error
    eval
    exec
    exit
    expr
    fblocked
    fconfigure
    fcopy
    file
    fileevent
    filename
    flush
    for
    foreach
    format
    gets
    glob
    global
    history
    if
    incr
    info
    interp
    join
    lappend
    library
    lindex
    linsert
    list
    llength
    load
    lrange
    lreplace
    lsearch
    lsort
    namespace
    open
    package
    pid
    pkg_mkIndex
    proc
    puts
    pwd
    read
    regexp
    regsub
    rename
    resource
    return
    scan
    seek
    set
    socket
    source
    split
    string
    subst
    switch
    tclvars
    tell
    time
    trace
    unknown
    unset
    update
    uplevel
    upvar
    variable
    vwait
    while

     

      Http

    Клиентская часть реализации протокола HTTP/1.0.
     
  • Синтаксис
  • Описание
  • Команды
  • Массив состояния транзакции
  •  

    СИНТАКСИС

    package require http?2.0?

    ::http::config ?options?

    ::http::geturl url ?options?

    ::http::formatQuery list

    ::http::resetk token

    ::http::wait token 

    ::http::status token

    ::http::size token 

    ::http::code token 

    ::http::data token 
     

    ОПИСАНИЕ

     
    Пакет http обеспечивает клиентскую часть протокола HTTP/1.0 и реализует операции GET, POST и HEAD. Он позволяет конфигурировать сервер-представитель (proxy) для выхода через межсетевые экраны. Пакет совместим с политикой безопасности Safesock.

    Процедура ::http::geturlвыполняет HTTP транзакцию. В зависимости от заданной опции это может быть GET, POST или HEAD транзакция. Величина, возвращаемая процедурой ::http::geturl, является признаком (token) выполнения транзакции. Кроме того, ее значение совпадает с именем массива в пространстве имен ::http, который содержит информацию о выполнении транзакции. Элементы массива описаны ниже, см. ⌠Массив состояния транзакции■.

    Если процедура вызвана с опцией -command, операция выполняется в фоновом режиме. Процедура ::http::geturl завершается сразу после формирования HTTP запроса, а результаты запроса обрабатываются после их получения. Для успешной работы в таком режиме необходимо, чтобы был запущен обработчик событий. Это всегда так для Tk-приложений. В чисто Tcl ≈ приложениях можно использовать процедуру ::http::wait для запуска обработчика событий.
     

    КОМАНДЫ

     
    ::http::config ?options?
    Команда ::http::config используется, чтобы установить или запросить имя proxy-сервера, порта и пользовательского приложения (User-Agent), используемые в HTTP запросах. Если никакие опции не заданы, возвращается текущая конфигурация. Если задан единственный аргумент, тогда, он должен быть именем одной из опций, описанных ниже. В этом случае возвращается текущая величина указанной опции. В противном случае аргументы состоят из пар: имя опции ≈ присваиваемое значение.
    -accept mimetypes
    Определяет типы документов, которые могут быть приняты по запросу. Значение по умолчанию ▒*/*▓ означает, что могут быть приняты документы любого типа. Чтобы ограничить список допустимых документов, можно использовать список (через запятую) шаблонов документов следующего вида: ⌠image/gif, image/jpeg, text/*■.
    -proxyhost hostname
    Имя proxy-сервера, через который осуществляется связь. Если не указано, связь осуществляется напрямую.
    -proxyport number
    Имя proxy-порта.
    -proxyfilter command
    Определяет команду, которая возвращает имена proxy-сервера и proxy-порта, необходимые для данной связи. В противном случае возвращает пустое значение. В качестве аргумента при вызове команды используется имя сервера (host). Если команда не задана, используются значения опций -proxyhost и -proxyport.
    -useragent string
    Определяет имя пользовательского приложения (User-Agent). Значение по умолчанию ⌠Tcl http client package 2.0.■
    ::http::geturl url ?options?
    Команда ::http::geturl ≈ основная команда пакета. Если задана опция -query, выполняется операция POST, если задана опция -validate, выполняется операция HEAD. В противном случае выполняется операция GET. Команда возвращает признак ≈ имя массива, который может быть использован для получения дополнительной информации о состоянии транзакции. Подробности см. ⌠Массив состояния транзакции■. Команда завершается после завершения соответствующей операции, если она вызвана без опции -command. В противном случае команда ::http::geturl завершается немедленно, а по завершении операции вызывается соответствующая команда для обработки ее результатов. Команда ::http::geturl может использоваться с различными опциями:
    -blocksize size
     
    Используется при чтении информации. Определяет максимальный размер блока (в байтах), который может быть прочитан за один раз. После каждого чтения блока вызывается команда, определенная с помощью опции -progress.


    -channel name

    Перенаправляет полученную информация в соответствующий канал вместо того, чтобы сохранять ее в переменной state(body).
    -command callback
    Обеспечивает вызов команды callback после завершения транзакции. При использовании этой опции команда ::http::geturl завершается сразу. Команда callback вызывается с аргументом token, который содержит имя массива, описанного ниже, см. ⌠Массив состояния транзакции■. Ниже приведен шаблон типовой процедуры для использования в данной опции:
    proc httpCallback {token} {
    upvar #0 $token state
    # Далее возможна работа со state как с обычным Tcl-массивом
    }


    -handler callback

    Опция обеспечивает вызов команды callback как только HTTP данные получены. Команда получает два дополнительных аргумента: HTTP socket и имя массива token, возвращенное командой ::http::geturl (см. ⌠Массив состояния транзакции■). Команда должна возвращать число байтов, прочитанных из socket. Ниже приведен шаблон подобной процедуры:
    proc httpHandlerCallback {socket token} {
    upvar #0 $token state
    # Получен доступ к socket и Tcl-массиву state
    ...
    (например: set data [read $socket 1000];set nbytes [string length $data])
    ...
    return nbytes
    }
    -headers keyvaluelist
    Опция используется для включения в заголовок HTTP запроса дополнительных полей. Аргумент должен быть правильным списком с четным числом элементов, состоящим попеременно из ключей и их значений. Ключи используются как имена полей заголовка. Из значений удаляются символы перехода на новую строку, чтобы избежать формирования неправильного заголовка. Например, если keyvaluelist содержит список {Pragma no-cache} будет сформирован следующий заголовок запроса:
    Pragma: no-cache
    -progress callback
    Опция обеспечивает вызов команды callback для обработки очередной порции данных. Команда callback получает три аргумента: значение token, возвращенное командой ::http::geturl, предполагаемый полный размер данных из мета-данных и текущее количество поступивших данных в байтах. Если  едполагаемый полный размер неизвестен, вместо него подставляется 0. Ниже приведен шаблон для процедуры, вызываемой по опции -progress:
    proc httpProgress {token total current} {

    upvar #0 $token state

    }


    -query query

    Если указана данная опция, ::http::geturl формирует запрос POST и передает его на сервер. Запрос должен быть сформатирован. Для выполнения форматирования может использоваться процедура ::http::formatQuery.
    -timeout milliseconds
    Если значение milliseconds не равно нулю, устанавливается соответствующее время задержки. Задержка выполняется перед вызовом команды ::http::reset и команды, заданной опцией -command. Во время задержки команда ::http::status возвращает значение timeout.
    -validate boolean
     
    Если значение boolean не равно нулю, ::http::geturl выполняет HTTP HEAD запрос. Такой запрос возвращает мета информацию об источнике данных (URL), а не его содержание. Мета информация содержится в переменной state(meta) (см. ⌠Массив состояния транзакции■).
    ::http::formatQuery key value?key value...?
    Команда выполняет перекодирование запроса. Команда использует четное число аргументов, являющихся соответственно ключами запроса и их значениями. Она преобразует ключи и значения и возвращает одну строку, в которой расставлены необходимые ⌠&■ и ⌠=■ разделители. Результат можно использовать в качестве значения для опции -query команды ::http::geturl.
    ::http::reset token?why?
    Команда перезапускает HTTP транзакцию token, если такая исполняется. Значение переменной state(status) при этом переустанавливается в why (по умолчанию ≈ reset) и вызывается команда, заданная опцией -command.
    ::http::wait token
    Эта команда обеспечивает ожидание завершения транзакции. Она работает только в надежных интерпретаторах, так как она использует команду vwait.
    ::http::data token
    Эта команда возвращает значение переменной state(body).
    ::http::status token
    Эта команда возвращает значение переменной state(status).
    ::http::code token
    Эта команда возвращает значение переменной state(http).
    ::http::size token
     
    Эта команда возвращает значение переменной state(currentsize).

    МАССИВ СОСТОЯНИЯ ТРАНЗАКЦИИ

     
    Команда ::http::geturl возвращает token ≈ имя Tcl-массива, содержащего информацию о HTTP транзакции. Для упрощения доступа к массиву можно использовать следующую конструкцию:
     
    upvar #0 $token state


    Массив содержит следующие элементы:
     

    body
    Содержание документа, заданного с помощью URL. Пусто, если указана опция -channel. Значение переменной можно получить также с помощью команды ::http::data.
    сurrentsize
    Текущий объем информации в байтах, полученный от источника. Значение переменной можно получить с помощью команды ::http::size.
    error
    Если элемент определен, он содержит строку с сообщением об ошибке, полученную при прерывании HTTP транзакции.
    http
    Элемент содержит значение HTTP статуса, полученное от сервера. Значение переменной можно получить также с помощью команды ::http::code. Статус представляет собой строку из трех цифр, значения которой соответствуют HTTP стандарту. Код 200 соответствует успешному выполнению транзакции. Коды, начинающиеся с ▒4▓ или ▒5▓, указывают на ошибку. Коды, начинающиеся с ▒3▓, соответствуют ошибкам перенаправления. В этом случае мета данные Location определяют новый источник информации, который содержит запрошенные данные.
    meta
    Мета данные, описывающие содержание документа. Данный элемент массива содержит список ключей и их значений. Чтобы облегчить доступ к данным можно использовать следующую конструкцию:
    array set meta $state(meta)
    Некоторые ключи мета данных перечислены ниже, но в HTTP стандарте их перечислено больше, кроме того, сервер может добавлять собственные.
    Content-Type
    Тип документа. Например, text/html, image/gif, application/postscript или application/x-tcl.
    Content-Length
     
    Объявленный размер документа. Реальный объем информации, полученной с помощью команды ::http::geturl, содержится в переменной state(size).
    Location
    Измененный адрес документа.
    status
    Возможные значения ok, reset или error. Во время транзакции значение пустое.
    totalsize
    Копия значения мета данных Content-Length.
    type
    Копия значения мета данных Content-Type.
    url
    Запрошенный адрес.
    Пример:
     
    # Копирование источника в файл и печать мета данных
    proc ::http::copy { url file {chunk 4096} } {
    set out [open $file w]
    set token [geturl $url -channel $out -progress ::http::Progress \
      -blocksize $chunk]
    close $out
    # Следующая команда завершает строку, начатую процедурой http::Progress
    puts stderr ⌠■
    upvar #0 $token state
    set max 0
    foreach {name value} $state(meta) {
      if {[string length $name] > $max} {
      set max [string length $name]
      }
      if {[regexp -nocase ^location$ $name]} {
      # Обработка перенаправления адреса
      puts stderr ⌠Location:$value■
      return [copy [string trim $value] $file $chunk]
     }
    }
    incr max
    foreach {name value} $state(meta) {
     puts [format ⌠%-*s %s■ $max $name: $value]
    }
    return $token

    }
    proc ::http::Progress {args} {
    puts -nonewline stderr. ; flush stderr
    }


    Safe Tcl

    Механизм создания и управления безопасными интерпретаторами.
     
  • Синтаксис
  • Описание
  • Синонимы
  •  
  • Команды
  • Опции
  • Безопасность
  • СИНТАКСИС
     
     

    ::safe::interpCreate?slave??options...?

    ::safe::interpInit slave?options...?

    ::safe::interpConfigure slave?options...?

    ::safe::interpDelete slave

    ::safe::interpAddToAccessPath slave directory

    ::safe::interpFindInAccessPath slave directory

    ::safe::setLogCmd?cmd arg...?
     
     

    ОПИСАНИЕ
     
     

    Safe Tcl ≈ это механизм безопасного исполнения ненадежных Tcl скриптов и предоставления этим скриптам опосредованного доступа к потенциально опасным функциям.

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

    Safe Tcl позволяет интерпретатору-предку создавать безопасные интерпретаторы с ограниченными возможностями, в которых содержится набор предопределенных синонимов для команд source, load, file и exit и сохраняются возможности автозагрузки команд и пакетов.

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

    Все команды для работыс безопасными интерпретаторами содержатся в пространстве имен safe. Команда ::safe::interpCreate создает безопасный интерпретатор. Возможные опции команды описаны ниже, см. ⌠Опции■.
    Команда возвращает имя созданного интерпретатора. Команда ::safe::interpInit аналогична, но ее первым аргументом должно быть имя интерпретатора, созданного с помощью команды interp. Команда ::safe::interpDelete удаляет интерпретатор, имя которого использовано в качестве аргумента. Команда ::safe::interpConfigure позволяет задать опции для безопасного интерпретатора или получить информацию об заданных ранее опциях. Подробно опции описаны ниже (см.  ⌠Опции■).

    Для каждого безопасного интерпретатора, созданного с помощью команды ::safe::interpCreate или инициированного с помощью команды ::safe::interpInit в родительском интерпретаторе создается список доступных каталогов ≈ виртуальный путь. Каждый каталог в пути связывается с реальным каталогом локальной файловой системы и с меткой, доступной в безопасном интерпретаторе. В результате надежный интерпретатор обходится без сведений о реальной файловой системе на машине, на которой исполняется интерпретатор. Когда в надежном интерпретаторе используется метка для доступа к конкретному файлу (например, для выполнения команды source или load), метка заменяется в родительском интерпретаторе на настоящее имя каталога и необходимый файл ищется в файловой системе. Надежный интерпретатор не получает сведений о реальном имени файла в файловой системе. Для работы с виртуальными именами файлов предусмотрены специальные команды. Команда::safe::interpConfigure позволяет задавать новый виртуальный путь для интерпретатора. Команда ::safe::interpAddToAccessPath позволяет добавлять каталоги к виртуальному пути указанного безопасного интерпретатора. Команда ::safe::interpFindInAccessPath позволяет найти каталог в виртуальном пути для безопасного интерпретатора и получить его метку. Если каталог не найден, выдается сообщение об ошибке.

    Команда ::safe::setLogCommand позволяет задать скрипт, который выполняется при каждом событии в безопасном интерпретаторе. Этот скрипт вызывается с одним аргументом ≈ строкой, содержащей описание события.
     

    СИНОНИМЫ
     
    При создании безопасного интерпретатора в нем определяются следующие команды ≈ синонимы:

    source fileName

    Аналогична команде source, однако позволяет работать только с файлами в виртуальном пути безопасного интерпретатора. Имя файла fileName должно содержать одну из меток, определенных для каталогов в виртуальном пути. Допустимые имена файлов более подробно описаны ниже (см. ⌠Безопасность■). load fileName
      Требуемый файл (обычно, объектный файл из разделяемой библиотеки) загружается в безопасный интерпретатор, если его удается найти. Имя файла должно содержать одну из меток для каталогов виртуального пути. Кроме того, разделяемый объектный файл должен содержать безопасную точку входа. Подробности приведены в описании команды load.


    file?options?

    Синоним команды file содержит только безопасные подкоманды обычной команды file, а именно: dirname, join, extension, root, tail, pathname и split. Назначение подкоманд приведено в описании команды file. exit При выполнении команды безопасный интерпретатор удаляется, вычисления в нем прерываются, но родительский интерпретатор продолжает существовать.
    КОМАНДЫ
     
    В родительском интерпретаторе для работы с безопасными интерпретаторами предусмотрены следующие команды:

    ::safe::interpCreate?slave??options...?

    Создает безопасный интерпретатор, инициализирует в нем команды ≈ синонимы, описанные выше, и механизмы автозагрузки команд и пакетов в соответствии с заданными опциями (см. ⌠Опции■). Если аргумент slave отсутствует, имя интерпретатора формируется автоматически. Команда всегда возвращает имя созданного интерпретатора. ::safe::interpInit  slave?options...? Команда аналогична предыдущей, однако интерпретатор должен быть уже создан каким-либо иным способом, например с помощью команды ::interp create-safe. ::safe::interpConfigure  slave?options...? Если опции не заданы, возвращает значения всех опций для указанного безопасного интерпретатора. В противном случае устанавливает указанные значения опций (подробнее см. ⌠Опции■). ::safe::interpDeleteslave
      Удаляет безопасный интерпретатор и вычищает в родительском интерпретаторе информацию о нем. Перед удалением выполняется скрипт, заданный с помощью опции -deletehook, если он был задан. К скрипту добавляется дополнительный аргумент ≈ имя удаляемого интерпретатора.


    ::safe::interpFindInAccessPathslave directory

    Команда возвращает метку, которую можно использовать в безопасном интерпретаторе для каталога directory. Если в виртуальном пути нет такого каталога, возвращается сообщение об ошибке.

    Пример использования команды:

    ###Создание безопасного интерпретатора
    ::safe::interpCreate qqq
    ###Присваивание переменной tk_library метки соответствующего каталога
    qqq eval [list set tk_library [::safe::interpFindInAccessPath qqq $tk_library]]
    ###Выполнение команды source в безопасном интерпретаторе
    qqq eval source \$tk_library/msgbox.tcl

    ::safe::interpAddToAccessPathslave directory Команда позволяет добавить к виртуальному пути указанного безопасного интерпретатора каталог directory. Команда возвращает значение метки для каталога directory. Если каталог уже содержался в виртуальном пути, команда только возвращает его метку и не добавляет его в виртуальный путь. Пример использования команды (см. пример к предыдущей команде):
      ::safe::interpAddToAccessPath qqq $my_lib
    qqq eval source \$my_lib/\$my_file
    ::safe::setLogCmd?cmd arg...? Эта команда позволяет задать скрипт, который будет выполняться при различных событиях, связанных с безопасными интерпретаторами. Если команда вызвана без аргументов, то она возвращает установленный ранее скрипт. Вызванная с одним аргументом ≈ пустой строкой ≈ команда удаляет установленный ранее скрипт и отменяет процесс журнализации. Установленный скрипт выполняется с одним дополнительным аргументом ≈ строкой, описывающей событие. Основное назначение команды ≈ использование при отладке скриптов, выполняемых в безопасных интерпретаторах. Используя ее, вы сможете получить полную информацию об ошибке, в то время как безопасный интерпретатор возвращает только обобщенное сообщение об ошибке (это позволяет избежать разглашения в сообщении об ошибке конфиденциальной информации, например, о реальных именах файлов). Пример использования:

    ::safe::setLogCmd puts stderr
     

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

    NOTICE for slave interp10 : Created
    NOTICE for slave interp10 : Setting accessPath=(/foo/bar) staticsok=1 nestedok=0 deletehook=()
    NOTICE for slave interp10 : auto_path in interp10 has been set to {$p(:0:)}
    ERROR for slave interp10 : /foo/bar/init.tcl: no such file or directory
     

    ОПЦИИ
     
    Для команд ::safe::interpCreate, ::safe::interpInit, и :safe::interpConfigure определены перечисленные ниже опции. Имена опций могут быть сокращены до минимальных однозначных имен. Имена опций не чувствительны к регистру, в котором они набраны.

    -accessPath?directoryList?

    Опция задает список каталогов, к которым может иметь доступ безопасный интерпретатор, и возвращает метки соответствующих каталогов. Если список не задан или если он пуст, безопасный интерпретатор получает доступ к каталогам, используемым для автозагрузки в родительском интерпретаторе. Подробнее см. ⌠Безопасность■. -noStatics Если эта опция задана, то не допускается загрузка статически связанных пакетов (как load {} Tk). По умолчанию загрузка таких пакетов разрешена. -nestedLoadOk Если эта опция задана, безопасный интерпретатор может загружать пакеты в собственные подинтерпретаторы. По умолчанию загрузка пакетов в подинтерпретаторы запрещена. -deleteHook?script? Если скрипт задан, он выполняется в родительском интерпретаторе (с дополнительным аргументом ≈ именем безопасного интерпретатора) перед удалением безопасного интерпретатора. Если скрипт не задан, то удаляется заданный ранее скрипт (если такой был) и никаких дополнительных действий перед удалением безопасного интерпретатора не производится. По умолчанию скрипт не задан.
    БЕЗОПАСНОСТЬ
     
    Save Tcl не дает полной гарантии безопасности. В частности, он не защищает от атак на сервер, когда поглощаются все ресурсы процессора и пользователь не может использовать компьютер для полезной работы. Однако такие атаки считаются, как правило, менее опасными, чем несанкционированный доступ к информации и нарушение целостности, от которых безопасный интерпретатор защищает. В безопасном интерпретаторе, помимо безопасного набора команд, который описан в описании команды interp, имеются синонимы для команд source, load, exit и безопасное подмножество подкоманд команды file. В безопасном интерпретаторе возможна автозагрузка библиотек и пакетов. Поскольку эти команды имеют дело с локальной файловой системой, существует потенциальная опасность использования их для доступа к конфиденциальной информации. Чтобы предотвратить эту возможность, в безопасном интерпретаторе используются не настоящие имена каталогов, а специальные метки. Эти метки транслируются в реальные имена файлов только в родительском интерпретаторе.

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

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

    Safe Tcl ≈ это механизм безопасного исполнения ненадежных Tcl скриптов и предоставления этим скриптам опосредованного доступа к потенциально опасным функциям.

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

    Safe Tcl позволяет интерпретатору-предку создавать безопасные интерпретаторы с ограниченными возможностями, в которых содержится набор предопределенных синонимов для команд source, load, file и exit и сохраняются возможности автозагрузки команд и пакетов.

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

    Все команды для работыс безопасными интерпретаторами содержатся в пространстве имен safe. Команда ::safe::interpCreate создает безопасный интерпретатор. Возможные опции команды описаны ниже, см. ⌠Опции■.
    Команда возвращает имя созданного интерпретатора. Команда ::safe::interpInit аналогична, но ее первым аргументом должно быть имя интерпретатора, созданного с помощью команды interp. Команда ::safe::interpDelete удаляет интерпретатор, имя которого использовано в качестве аргумента. Команда ::safe::interpConfigure позволяет задать опции для безопасного интерпретатора или получить информацию об заданных ранее опциях. Подробноопции описаны ниже (см. ⌠Опции■).

    Для каждого безопасного интерпретатора, созданного с помощью команды ::safe::interpCreate или инициированного с помощью команды ::safe::interpInit в родительском интерпретаторе создается список доступных каталогов ≈ виртуальный путь. Каждый каталог в пути связывается с реальным каталогом локальной файловой системы и с меткой, доступной в безопасном интерпретаторе. В результате надежный интерпретатор обходится без сведений о реальной файловой системе на машине, на которой исполняется интерпретатор. Когда в надежном интерпретаторе используется метка для доступа к конкретному файлу (например, для выполнения команды source или load), метка заменяется в родительском интерпретаторе на настоящее имя каталога и необходимый файл ищется в файловой системе. Надежный интерпретатор не получает сведений о реальном имени файла в файловой системе. Для работы с виртуальными именами файлов предусмотрены специальные команды. Команда ::safe::interpConfigure позволяет задавать новый виртуальный путь для интерпретатора. Команда ::safe::interpAddToAccessPath позволяет добавлять каталоги к виртуальному пути указанного безопасного интерпретатора. Команда ::safe::interpFindInAccessPath позволяет найти каталог в виртуальном пути для безопасного интерпретатора и получить его метку. Если каталог не найден, выдается сообщение об ошибке.

    Команда ::safe::setLogCommand позволяет задать скрипт, который выполняется при каждом событии в безопасном интерпретаторе. Этот скрипт вызывается с одним аргументом ≈ строкой, содержащей описание события.
     
     
     

    ОПИСАНИЕ
     
     
    Синтаксис и семантика языка Tcl определены описанным  ниже образом.

    Скрипт на Tcl представляет собой одну или более команд. Символы точки с запятой (;) и новой строки служат разделителями команд, если не находятся между символами кавычек. Закрывающие скобки служат окончанием тела команды при подстановках команд, если не находятся между символами кавычек.

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

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

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

    Если слово начинается с открывающей фигурной скобки ({), то оно должно заканчиваться на парную ей закрывающую скобку (}). Внутри фигурных скобок могут также содержаться слова в фигурных скобках. При этом каждая открывающая фигурная скобка должна иметь парную ей закрывающую фигурную скобку. Однако, если открывающая или закрывающая фигурная скобка отмечена обратным слешем, то она не учитывается при поиске парной скобки. Для символов между фигурными скобками не выполняется никаких подстановок, за исключением описанной ниже подстановки ⌠обратный слеш ≈ новая строка⌠. Также не приписывается никакого специального смысла символам точки с запятой, новой строки, закрывающей скобки и пробела. Слово будет состоять из символов между скобками, за исключением самих скобок.

    Если слово содержит открывающую квадратную скобку ([), то Tcl выполняет подстановку команды. Для этого он рекурсивно вызывает интерпретатор Tcl, который обрабатывает символы, следующие за скобкой, как скрипт Tcl. Скрипт может иметь любое количество команд и должен оканчиваться закрывающей квадратной скобкой (]). Результат выполнения скрипта (т.е., результат его последней команды) подставляется в слово на место скобок и всех символов между ними. В слове может быть любое количество подстановок команд. Подстановки команд не выполняются в словах, заключенных в фигурные скобки.

    Если слово содержит символ доллара ($), тогда Tcl выполняет подстановку переменной: символ доллара и последующие символы заменяются в слове на значение этой переменной. Существует три способа подстановки переменной:

    $name
    Здесь name ≈ имя скалярной переменной, оно заканчивается любым символом, за исключением буквы, цифры или символа подчеркивания.
    $name(index)
    Здесь name есть имя массива данных, а index ≈ имя элемента внутри этого массива. Name должен состоять только из букв, цифр и символов подчеркивания. Все виды подстановок выполняются по отношению к символам index.
    ${name}
    Здесь name ≈ имя скалярной переменной, оно может состоять из каких угодно символов, кроме закрывающей фигурной скобки.
    В слове может быть любое количество подстановок переменных. Подстановки переменных не выполняются для слов, заключенных в фигурные скобки.

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

    СИНТАКСИС ОПИСАНИЕ
     
     

    append



     
     
     
     
     

    Команда дописывает значения аргументов к значению переменной.


    СИНТАКСИС
     

    append varName?value value value...?
    ОПИСАНИЕ
     
    Команда append добавляет все аргументы value к значению переменной varName. Если такой переменной не было, она будет создана, и ее значение будет равно соединению значений аргументов value. Эта команда предоставляет удобный способ постепенного наращивания длинных переменных. сЕли переменная a содержит длинное значение, то  команда ⌠append a $b" выполняется значительно быстрее, чем ⌠set a $a$b" .
     
    array
    СИНТАКСИС
    array option arrayName?arg arg...?

    array anymore arrayName searchId

    array donesearch arrayName searchId

    array exists arrayName

    array get arrayName?pattern?

    array names arrayName?pattern?

    array nextelement arrayName searchId

    array set arrayName list

    array size arrayName

    array startsearch arrayName
     

    ОПИСАНИЕ
    Эта команда предназначена для выполнения перечисленных ниже операций с массивами. Если иное не оговорено специально, arrayName должно быть именем существующего массива. Аргумент option определяет конкретную операцию. Для команды определены перечисленные ниже опции. array anymore arrayName searchId
    Возвращает ▒1▓ если при выполнении команды поиска (см. ниже) остались невыбранные элементы массива, и ▒0▓ в противном случае. SearchId указывает операцию поиска, информация о которой запрашивается (величина searchId возвращается при выполнении команды array startsearch). Эта опция особенно удобна, если массив содержит элемент с пустым именем, поскольку команда array nextelement не позволяет в таком случае определить, закончен ли поиск.
    array donesearch arrayName searchId
    Команда прерывает поиск элементов массива и удаляет всю связанную с поиском информацию. SearchId указывает операцию поиска, информация о которой удаляется (величина searchId возвращается при выполнении команды array startsearch). Команда возвращает пустую строку.
    array exists arrayName
    Возвращает ▒1▓, если arrayName есть имя массива, и ▒0▓, если такой переменной не существует или она является скалярной переменной.
    array get arrayName?pattern?
    Возвращает список, содержащий пары элементов. Первый элемент пары ≈ имя элемента массива arrayName, второй элемент пары ≈ значение этого элемента. Порядок пар не определен. Если шаблон не задан, то все элементы массива будут включены в результат. Если шаблон задан, то в результат будут включены только те элементы, чьи имена соответствуют шаблону (используя те же правила, что и в команде glob). Если arrayName не является переменной массива или массив не содержит элементов, то возвращается пустой список.
    array names arrayName?pattern?
    Возвращает список, содержащий имена всех элементов массива, соответствующих шаблону (используя те же правила, что и в команде glob). Если шаблона нет, то команда возвращает имена всех элементов массива. Если в массиве нет элементов, соответствующих шаблону или arrayName не является именем переменной массива, то возвращается пустая строка.
    array nextelement arrayName searchId
    Возвращает имя следующего элемента массива arrayName, или пустую строку, если все элементы массива уже возвращены. SearchId указывает операцию поиска, (величина searchId возвращается при выполнении команды array startsearch). Предупреждение: если в массив внесен новый элемент или из массива удален один из элементов, то все операции поиска в этом массиве автоматически заканчиваются, как если бы была выполнена команда array donesearch. Соответственно, попытка выполнить после этого команду array nextelement приведет к ошибке.
    array set arrayName list
    Устанавливает значение одного или нескольких элементов массива arrayName. Список list должен иметь такую же структуру, как список, возвращаемый командой array get, то есть состоять из четного числа элементов. Все нечетные элементы списка рассматриваются как имена элементов массива arrayName, а следующие за ними четные элементы ≈ как новые значения соответствующих элементов.
    array size arrayName
    Возвращает строку, содержащую десятичное число, равное количеству элементов указанного массива. Если arrayName не является именем массива, возвращается ▒0▓.
    array startsearch arrayName
    Эта команда инициализирует процесс поиска элементов указанного массива. После этого имя каждого следующего элемента массива можно получить с помощью команды array nextelement. По завершении поиска необходимо выполнить команду array donesearch. Команда array startsearch возвращает идентификатор процесса поиска, который должен использоваться в командах array nextelement и array donesearch. Благодаря этому механизму возможно проведение нескольких процессов поиска элементов одного и того же массива одновременно.


    СИНТАКСИС

    bgerror сообщение ОПИСАНИЕ В Tcl нет встроенной команды bgerror. Если в приложении тем не менее необходимо обрабатывать фоновые ошибки, пользователь может определить собственную команду bgerror, например, как Tcl-процедуру.
    Фоновые ошибки ≈ это ошибки в командах, которые не вызваны непосредственно из приложения. Например, фоновыми являются ошибки в командах, вызванных с помощью конструкции after. Для нефоновых ошибок сообщение об ошибке возвращается через вложенные вызовы команд, пока не достигнет верхнего уровня приложения. После этого приложение выдает сообщение об ошибке в одной из команд верхнего уровня. При фоновой ошибке подобный процесс не достигает команд верхнего уровня и формирование сообщения об ошибке оказывается затруднительным.
    Когда Tcl обнаруживает фоновую ошибку, он сохраняет информацию об ошибке и вызывает команду bgerror с помощью обработчика событий. Перед вызовом bgerror восстанавливаются значения переменных errorInfo и errorCode, которые были при обнаружении ошибки. После этого вызывается команда bgerror с единственным аргументом ≈ сообщением об ошибке. Предполагается, что в приложении определена команда bgerror и что она выдает сообщение об ошибке надлежащим образом. Если при выполнении команды bgerror не произошло новой ошибки, возвращаемый ею результат игнорируется.
    Если при исполнении команды bgerror произошла новая ошибка (например, если эта команда не существует), сообщение об ошибке поступает в канал вывода ошибок.

    Если до вызова обработчиком событий команды bgerror произошло несколько фоновых ошибок, то, как правило, команда будет вызвана для каждой из обнаруженных ошибок. Однако, если сама команда bgerror возвращает код break (см. описание команды return), последующие ее вызовы пропускаются.

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

    СИНТАКСИС ОПИСАНИЕ



    break

    Команда прекращает выполнение цикла.   СИНТАКСИС break ОПИСАНИЕ  
    Обычно данная команда помещается внутрь цикла, например созданного командами for, foreach или while. Команда возвращает код TCL_BREAK, который вызывает завершение исполнения наименьшего охватывающего ее цикла. Цикл завершается нормальным образом (без ошибки) как если бы он отработал до конца. Код TCL_BREAK обрабатывается также в некоторых других ситуация ≈ при исполнении команды catch, при обработке событий и в скрипте самого верхнего уровня.

    case

    Команда case исполняет один из нескольких скриптов в зависимости от полученного значения.   СИНТАКСИС case string?in? patList body?patList body...?

    case string?in? {patList body? body...?}

    ОПИСАНИЕ   Замечание. Команда case ≈ устаревшая, она поддерживается только для совместимости с предыдущими версиями. В последующих версиях она может быть опущена. Поэтому предпочтительнее использование команды switch. Команда сравнивает string со всеми аргументами patList по очереди. Каждый аргумент patList представляет собой один или несколько (список) образцов. Если string соответствует одному из образцов, то case рекурсивно вызывает интерпретатор Tcl, передает ему следующий за этим списком образцов скрипт body для выполнения и возвращает результат этого выполнения. Каждый аргумент patList состоит из одного или нескольких образцов. Каждый образец может содержать спецсимволы, как в команде string match. Кроме того, есть специальный образец default. Соответствующий ему скрипт выполняется, если string не соответствует никакому другому образцу.   Если string не соответствует ни одному из образцов, а образец default не используется, то case вернет пустую строку.   У команды есть две формы записи для аргументов patList и body. Первая использует отдельные аргументы для каждого шаблона и команды. Эта форма более удобна, если в образцах или командах желательно выполнить какие-либо подстановки. Во второй форме все шаблоны и команды объединены в один аргумент, который должен быть списком, состоящим из шаблонов и команд. Вторая форма позволяет проще записывать многострочные команды, поскольку при этом фигурные скобки вокруг списка позволяют не ставить обратный слеш в конце каждой строки. Однако из-за этих фигурных скобок подстановки в шаблонах и командах не производятся. Поэтому одна и та же команда, записанная в различных формах, может работать по-разному.

    catch

    Команда выполняет скрипт и обрабатывает ошибки, если они возникают. СИНТАКСИС   catch script?varName? ОПИСАНИЕ Данную команду можно использовать для того, чтобы не дать возникшим ошибкам прекратить процесс интерпретации команд. Для исполнения скрипта script команда catch рекурсивно вызывает интерпретатор Tcl и всегда возвращает код TCL_OK, независимо от возможно возникших при исполнении скрипта script ошибок.   Команда catch возвращает десятичную строку, содержащую код, возвращаемый Tcl-интерпретатором по исполнению скрипта. Если при исполнении скрипта не возникло ошибок, возвращается код 0 (TCL_OK). В противном случае возвращается ненулевое значение, соответствующее коду прерывания (см. файл tcl.h). Если задан аргумент varName, он определяет имя переменной, которой присваивается значение, возвращаемое скриптом (результат выполнения или сообщение об ошибке).
    Команда catch обрабатывает все прерывания, в том числе от команд break и continue.

    cd

    Команда предназначена для перехода в другой каталог. СИНТАКСИС cd ?dirName? ОПИСАНИЕ   Команда делает текущим каталогом каталог dirName, или, если параметр dirName не указан, каталог, заданный в переменной окружения HOME. Команда возвращает пустую строку.

    clock

    С помощью команды clock можно получить и преобразовать значение времени. СИНТАКСИС  
    clock option?arg arg...?
    ОПИСАНИЕ  
    Команда выполняет одно из перечисленных ниже действий, с помощью которых можно получить и преобразовать строки или значения, являющиеся той или иной формой записи времени. Параметр option определяет выполняемое командой действие, одно из следующего списка (параметр может быть сокращен):

    clock clicks

    Возвращает целое число, с высокой точностью представляющее машинное время. Единица измерения зависит от операционной системы и компьютера и представляет собой минимальную доступную величину, например, счетчик циклов процессора. Эта величина может использоваться только для относительного измерения пройденного времени. clock format clockValue?-format string??-gmt boolean?
      Переводит целое число, возвращаемое командами clock seconds, clock scan или командами file atime, file mtime и file ctime в удобочитаемую форму. Если в команде присутствует аргумент-format, следующий аргумент должен быть строкой, описывающей формат представления времени. Строка состоит из описаний полей, состоящих из символа ▒%▓ и буквы. Все остальные символы в строке просто копируются в результат. Ниже перечислены допустимые описания полей.


    %% ≈ вставляет %.

    %a ≈ сокращенное название дня недели (Mon, Tue, etc.).

    %A ≈ полное название дня недели (Monday, Tuesday, etc.).

    %b ≈ сокращенное название месяца (Jan, Feb, etc.).

    %B ≈ полное название месяца.

    %c ≈ локальные дата и время.

    %d ≈ день месяца (01 ≈ 31).

    %H ≈ часы в двадцатичетырехчасовом формате (00 ≈ 23).

    %I ≈ часы в двенадцатичасовом формате (00 ≈ 12).

    %j ≈ день года (001 ≈ 366).

    %m ≈ номер месяца (01 ≈ 12).

    %M ≈ минуты (00 ≈ 59).

    %p ≈ AM/PM индикатор (до/после полудня).

    %S ≈ секунды (00 ≈ 59).

    %U ≈ неделя года (01 ≈ 52), Воскресенье ≈ первый день недели.

    %w ≈ номер дня недели (Воскресенье = 0).

    %W ≈ неделя года (01 ≈ 52), Понедельник первый день недели.

    %x ≈ локальный формат даты.

    %X ≈ локальный формат времени.

    %y ≈ год без столетия (00 ≈ 99).

    %Y ≈ год со столетием (например, 1990)

    %Z ≈ имя часового пояса.

    Кроме того, в некоторых операционных системах могут поддерживаться

    %D ≈ дата в формате %m/%d/%y.

    %e ≈ день месяца (1 ≈ 31), без нулей впереди.

    %h ≈ сокращенное имя месяца.

    %n ≈ новая строка.

    %r ≈ время в формате %I:%M:%S %p.

    %R ≈ время в формате %H:%M.

    %t ≈ табуляция.

    %T ≈ время в формате %H:%M:%S.

    Если аргумент -format не задан, используется формат %a %b %d %H:%M:%S %Z %Y. Если задан аргумент -gmt, следующий аргумент должен быть булевой величиной. Значение true означает, что используется время по Гринвичу, значение false означает, что используется время по локальному часовому поясу, который задан для операционной системы.

    clock scan dateString?-base clockVal??-gmt boolean?

    Переводит дату dateString в целое число (см. clock seconds). Команда может перевести в число любую стандартную строку, содержащую время и/или дату, включая название часового пояса. Если строка содержит только время, предполагается текущая дата. Если название часового пояса не указано, предполагается локальный часовой пояс (если значение опции -gmt не равно true. В этом случае предполагается, что время задано по Гринвичу).

    Если в команде указан флаг -base, следующий аргумент должен содержать время в виде целого числа. По этому числу определяется дата и используется вместо указанной в строке или текущей. Такая возможность полезна при необходимости перевести в целое число время на заданную дату.

    Аргумент dateString должен состоять из одной или более спецификаций следующих видов:

    time ≈ Время суток в форме: hh?:mm?:ss???meridian??zone? или в форме hhmm?meridian??zone?, где meridian ≈ индикатор AM или PM, zone ≈ имя часового пояса. Если индикатор meridian не определен, hh считается числом часов в двадцатичетырехчасовом формате.

    Date ≈ Месяц, день и, возможно, год. Допустимые форматы mm/dd?/yy?, monthname dd?, yy?, dd monthname?yy? и day, dd monthname yy. По умолчанию год считается текущим годом. Если год меньше 100, то года 00-38 считаются годами в диапазоне 2000-2038, а года 70-99 считаются годами в диапазоне 1970-1999. Года 39-70 могут быть недопустимыми на некоторых платформах. Для тех платформ, для которых они определены, они считаются годами в диапазоне 1939-1999.

    relative time ≈ Время относительно текущего момента. Формат ≈ число единица измерения. Возможные единицы измерения year, fortnight, month, week, day, hour, minute(илиmin), иsecond(илиsec). Единицы измерения могут указываться во множественном числе, например
    3 weeks. Кроме того, могут использоваться модификаторы: tomorrow, yesterday, today, now, last, this, next, ago.

    Реальная дата вычисляется в следующей последовательности. Сначала определяется абсолютная дата и/или время, которые переводятся в целое число. Это число используется как базис, к которому добавляется заданный день недели. Далее используется относительное время. Если задана дата, а время (абсолютное или относительное) отсутствует, считается, что это полночь. И последним шагом производится коррекция вычисленной даты, при которой учитываются летнее время и число дней в различных месяцах.

    clock seconds

    Возвращает время в секундах от начала ⌠эпохи■. Может использоваться для вычисления разности времен. ⌠Эпоха■ зависит от используемой операционной системы и компьютера.
    close
    Команда закрывает открытый канал.
    СИНТАКСИС
    close channelId
    ОПИСАНИЕ
     
    Команда close закрывает канал, идентификатор которого задан аргументом channelId. Идентификатор channelId возвращается командами open и socket при открытии канала.

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

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

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

    Если канал совместно используется несколькими интерпретаторами, то команда делает канал channelId недоступным в вызвавшем команду интерпретаторе, но не оказывает никакого другого действия на канал, пока все использующие канал интерпретаторы не закроют его. При выполнении команды в последнем из интерпретаторов, использовавших его, выполняются описанные выше действия. Подробности совместного использования канала несколькими интерпретаторами приведены в описании команды interp.
    Команда close возвращает пустую строку. Она может порождать ошибку, если при выводе данных произошла ошибка.

    concat
    Команда соединяет списки в один общий список.
    СИНТАКСИС
    concat?arg arg...?
    ОПИСАНИЕ
    Аргументы arg считаются списками, команда concat объединяет их в один общий список. При этом она удаляет пробелы в начале и конце arg, и вставляет по одному пробелу между ними. Команда допускает произвольное число аргументов. Например, команда
    concat a b {c d e} {f {g h}} возвращает список
    a b c d e f {g h}


    Если не задано никаких аргументов, то команда возвращает пустую строку.
     
     
     
     


    continue
    Команда continue прекращает выполнение текущего шага цикла.
    СИНТАКСИС
    continue
    ОПИСАНИЕ
    Обычно данная команда помещается внутрь цикла, например, созданного командами for, foreach или while. Команда возвращает код TCL_CONTINUE, который вызывает завершение текущей итерации наименьшего охватывающего ее цикла. Управление возвращается команде цикла, которая начинает следующий шаг цикла. Код TCL_CONTINUE обрабатывается также в некоторых других ситуациях ≈ при исполнении команды catch и в скрипте самого верхнего уровня.

     
     
     

    eof
    Команда проверяет в канале условие конца файла.
    СИНТАКСИС
    eof channelId
    ОПИСАНИЕ
    Команда eof возвращает ▒1▓, если во время последней операции ввода в канале channelId произошло условие конца файла, и 0 ≈ в противном случае.

     

    error
    Команда генерирует ошибку.
    СИНТАКСИС
    error message?info??code?
    ОПИСАНИЕ
    Команда возвращает код TCL_ERROR, прерывающий интерпретацию команды. Строка message возвращается приложению, чтобы указать, что именно произошло.

    Если задан непустой аргумент info, его значение присваивается глобальной переменной errorInfo.

    Переменная errorInfo обычно используется для формирования сведений о вложениях команды, в которой произошла ошибка. Другими словами, как только оказывается, что невыполненная команда была вложена в другую команду, информацию об этой команде добавляется к errorInfo. Если же аргумент info был задан, этого не происходит. Эта особенность позволяет при использовании команды error совместно с командой catch выдать информацию о реальном месте ошибки (а не о месте вызова команды error). Дляэтого можно использовать следующую конструкцию:

    catch {...} errMsg
    set savedInfo $errorInfo
    ...
    error $errMsg $savedInfo
    Если задан аргумент code, то его значение будет присвоено глобальной переменной errorCode. Эта переменная предназначена для хранения машинного описания ошибки в тех случаях, когда такое описание возможно. Форматы различных сообщений приведены в разделе tell. Если аргумент не задан, переменной errorCode в процессе обработки Tcl-интерпретатором ошибки, порожденной командой, присваивается значение ``NONE''.
     

    eval
     
    Команда исполняет Tcl-скрипт.
    СИНТАКСИС eval arg?arg...? ОПИСАНИЕ Аргументы команды eval вместе образуют Tcl-скрипт, состоящий из одной или нескольких команд. Команда соединяет аргументы (подобно команде concat) и передает их рекурсивно запущенному интерпретатору Tcl. Команда возвращает результат работы интерпретатора (или обнаруженную им ошибку).


    exec

    Команда запускает подпроцессы.
    СИНТАКСИС exec?switches? arg?arg...? ОПИСАНИЕ Аргументы команды определяют один или нескольких подпроцессов, которые необходимо выполнить. Аргументы принимают форму конвейера, в котором каждый arg задает одно слово команды, а каждая отдельная команда порождает подпроцесс.

    Если первые аргументы команды начинаются со знака '-', они считаются ключами команды, а не частью описания конвейера.

    Возможные ключи:

    -keepnewline ≈ сохраняет конечные пробелы в выходных данных конвейера. Обычно они отсекаются.

    - ≈ отмечает конец ключей. Аргумент, следующий за этим ключом, рассматривается как первый аргумент arg, даже если он начинается со знака '-'.

    Перечисленные ниже аргументы (пары аргументов) используют не для определения подпроцессов, а для перенаправления потоков ввода и вывода между ними. В выражения типа ``< fileName'' fileName может писаться как отдельно, так и слитно (``<fileName>'').

    | ≈ разделяет команды в конвейере. Стандартный вывод предыдущей команды направляется на стандартный вход следующей команды.

    |& ≈ разделяет команды в конвейере. Стандартный вывод и стандартный вывод ошибок предыдущей команды направляются на стандартный вход следующей команды. Такое выражение перебивает выражения типа ▒2>▓ и ▒>&▓.

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

    <@ fileId ≈ в этой форме fileId это идентификатор файла, открытого с помощью команды open. Он используется как стандартный ввод для первой команды конвейера. Файл должен быть открыт для чтения.

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

    > fileName ≈ Стандартный вывод последней команды перенаправляется в файл fileName и перезаписывает его содержимое.

    2> fileName ≈ Стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и перезаписывает его содержимое.

    >& fileName ≈ Стандартный вывод последней команды и стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и перезаписывает его содержимое.

    >>fileName ≈ Стандартный вывод последней команды перенаправляется в файл fileName и добавляется к его прежнему содержимому.

    2>>fileName Стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и добавляется к его прежнему содержимому. >>& fileName ≈ Стандартный вывод последней команды и стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и добавляется к его прежнему содержимому.

    >@ fileId ≈ в этой форме fileId это идентификатор файла, открытого с помощью команды open. Стандартный вывод последней команды перенаправляется в файл fileName и перезаписывает его содержимое. Файл должен быть открыт для записи.
     

    2>@ fileId- в этой форме fileId это идентификатор файла, открытого с помощью команды open. Стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и перезаписывает его содержимое. Файл должен быть открыт для записи.


    >&@ fileId- в этой форме fileId это идентификатор файла, открытого с помощью команды open. Стандартный вывод последней команды и стандартный вывод ошибок всех команд в конвейере перенаправляется в файл fileName и перезаписывает его содержимое. Файл должен быть открыт для записи.

    Если стандартный вывод последней команды конвейера не был перенаправлен, то команда exec возвращает его значение. Если одна из команд конвейера вернула код ошибки, была прервана или приостановлена, то команда exec вернет код ошибки. При этом сообщение об ошибке будет включать стандартный вывод конвейера и сообщение об ошибке. В переменной errorCode будет записана дополнительная информация о последней встреченной ошибке. Если хотя бы одна из команд конвейера пишет информацию об ошибках в файл и стандартный вывод ошибок не перенаправлен, команда exec вернет ошибку, сообщение об ошибке будет включать в себя стандартный вывод конвейера, дополненный сообщениями об ошибках (если их было несколько) и стандартным выводом ошибок.

    Если последний символ результата исполнения конвейера или сообщения об ошибке ≈ перевод каретки, то он будет удален из результата или сообщения соответственно. Это соответствует общему правилу Tcl, по которому возвращаемая величина, как правило, не оканчивается символом перевода каретки. Однако, если указана опция -keepnewline, символ перевода каретки в конце сохраняется.
    Если стандартный ввод конвейера не перенаправлен с помощью символов ``<'', ``<<'' или ``<@'', стандартный ввод в первую команду конвейера осуществляется со стандартного ввода приложения.
    Если последним аргументом конвейера является '&', конвейер выполняется в фоновом режиме. В этом случае команда exec возвращает список идентификаторов всех процессов конвейера. Стандартный вывод последней команды конвейера, если он не перенаправлен, выводится на стандартный вывод приложения. Стандартный вывод ошибок, если он не перенаправлен, осуществляется в стандартный вывод ошибок приложения.

    Первое слово в каждой команде считается именем команды. В нем выполняются тильда ≈ подстановки. Если получившийся при этом результат не содержит слешей, соответствующая команда ищется в каталогах, перечисленных в переменной окружения PATH. Если имя команды после подстановок содержит слеши, оно должно указывать на исполняемый файл, доступный из текущего каталога. Никакие другие подстановки в командах, например, принятые в shell подстановки ▒*▓ и  '?', не выполняются.

    ВОПРОСЫ ПЕРЕНОСИМОСТИ НА ДРУГИЕ ПЛАТФОРМЫ  
    Windows (все версии)
    Чтение и запись с использование ``@ fileId'' не работают. Исполнение 16- и 32-разрядных приложений различается между собой и отличается от описанного выше. Tk консоль не реализует всех стандартных возможностей ввода/вывода.
    В командах допускается использование как прямых, так и обратных слешей при указании пути команды. Однако, если путь является аргументом команды, это может оказаться и не так.
    Двойной слеш в путях указывает на сетевой адрес.
      Windows NT Для выполнения встроенных команд shell, таких, как dir или copy, перед ними необходимо указать ``cmd.exe /c ''.
      Windows 95 Для выполнения встроенных команд shell, таких, как dir или copy, перед ними необходимо указать ``command.com /c ''.
      Windows 3.X Возможности команды exec сильно ограничены.
      Macintosh Команда exec не реализована.
      Unix Команда exec позволяет исполнять любые приложения и действует как описано выше.
    exit
    Команда exit прекращает исполнение приложения. СИНТАКСИС exit?returnCode? ОПИСАНИЕ Прекращает процесс и возвращает системе returnCode в качестве кода завершения. Если returnCode не определен, то команда использует значение по умолчанию 0.

    expr
    Команда expr вычисляет значение выражения.
     
  • Синтаксис
  • Описание
  • Операнды
  • Операторы
  • Матетатические функции
  • Типы данных, точность вычислений и переполнения
  • Операции со строками
  • СИНТАКСИС expr arg?arg arg...? ОПИСАНИЕ Команда соединяет аргументыarg через пробел в одно Tcl-выражение, вычисляет и возвращает его значение. Допустимые в Tcl-выражениях операторы математических действий составляют подмножество операторов языка С, и имеют такое же значение и порядок выполнения, что и соответствующие операторы С. Почти всегда результатом вычисления является число: целое или с плавающей запятой. Например, результат выражения expr 8.2 + 6 равен ▒14.2▓.

    Выражения в Tcl отличаются от выражений в С способом описания операндов. Кроме того, Tcl-выражения поддерживают нечисловые операнды и сравнение строк.
     

    ОПЕРАНДЫ  
    Выражение Tcl состоит из комбинации операндов, операторов и скобок. Между ними всеми можно ставить пробелы, потому что при вычислении значения пробелы игнорируются. По возможности, все операнды интерпретируются как целые числа, если не задано иное. Целые числа могут быть десятичными числами (обычно), восьмеричными (если первая цифра числа есть 0) или шестнадцатеричными (если первые два символа числа ≈ 0х). Если операнд не подпадает ни под один из названных форматов, он считается числом с плавающей запятой, если это возможно. Числа с плавающей запятой можно задавать любым из способов, воспринимаемым совместимым с ANSI компилятором С. Исключение составляет запрет в большинстве версий на суффиксы f, F, l, и L. Примеры правильных чисел с плавающей запятой: 2.1, 3., 6e4, 7.91e+16. Если числовая интерпретация невозможна, то операнд считается строковым, и работать с ним может только ограниченный набор операторов.

    Операнды могут быть заданы одним из следующих способов:

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

    В качестве примеров рассмотрим простые выражения, в которых переменная a имеет значение '3', а значение переменной b есть '6'. Тогда выражение в левой части каждой строки даст значение в ее правой части:

    3.1 + $a  6.1
    2 + ($a.$b)  5.6
    4*[llength (6 2)]  8
    {word one} < (word $a)  0

    ОПЕРАТОРЫ

     
    Действующие операторы перечислены ниже в порядке убывания приоритетности исполнения.
    -  +      ~       !
    Унарный минус, унарный плюс, побитовое неравенство NOT, логическое NOT. Ни один из этих операторов не может быть использован со строковыми операндами, а побитовое NOT может использоваться только с целыми числами.
    *    /       % 
    Умножить, разделить, остаток деления. Ни один из этих операторов не может быть использован со строковыми операндами, а оператор остатка может использоваться только для целых чисел.
    +     -
    Сложение и вычитание. Могут использоваться для любых числовых операндов.
    <<       >>
    Сдвиг влево и вправо. Операторы можно использовать только с целыми числами. Сдвиг вправо также сдвигает и знаковый бит.
    <    >     <= >=
    Операторы булевой алгебры: меньше, больше, не больше, не меньше. Каждый оператор дает результат 1, если неравенство верно, и 0 ≈ в обратном случае. Кроме числовых операндов, операторы можно применять для строковых выражений, в этом случае выполняется сравнение строк.
    ==     !=
    Булевские операторы: равно и не равно. Результат операции ≈ число 0 или 1. Операторы можно применять с любыми аргументами.
    &
    Оператор побитового AND. Используется только с целыми операндами.
    ^
    Оператор побитового исключающего OR. Применяется только с целыми числами.
    |
    Оператор побитового OR. Применяется только с целыми числами.
    &&
    Оператор логического AND. Результат равен 1, если оба операнда равны 1, и 0 ≈ в обратном случае. Операндами могут быть любые числа, как целые, так и с плавающей запятой.
    ||
    Оператор логического OR. Результат равен 0, если оба операнда равны 0, и 1 ≈ в обратном случае. Операндами могут быть любые числа, как целые, так и с плавающей запятой.
    x?y:z
    Конструкция if-then-else, подобная аналогичной конструкции в языке C. Операнд х должен иметь числовое значение. Если значение х не равно нулю, то результат команды будет у. В обратном случае результат будет z.
    Более подробные описания операторов можно найти в любом руководстве по языку С.

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

    expr 4*2 < 7 возвращает результат ▒0▓.

    Подобно языку C, операторы '&&', '||', и '?:' имеют свойство ⌠ленивого вычисления■, т.е., если операнд не нужен для получения результата, то он не вычисляется. Например, в команде

    expr {$v? [a] : [b]} будет вычислено только одно из выражений [a] и [b], в зависимости от значения $v. Однако, это справедливо только тогда, когда все выражение заключено в фигурные скобки. В противном случае анализатор Tcl сначала вычислит [a] и [b], и только потом вызовет команду expr.
    МАТЕМАТИЧЕСКИЕ ФУНКЦИИ  
    Tcl поддерживает в выражениях следующие математические функции:
    acos
    cos
    hypot
    sinh
    asin
    cosh
    log
    sqrt
    atan
    exp
    log10
    tan
    atan2
    floor
    pow
    tanh
    ceil
    fmod
    sin
     
    Каждая из этих функций вызывает одноименную функцию из математической библиотеки.

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

    abs(arg) ≈ возвращает абсолютное значение аргумента. Аргумент может быть целым или числом с плавающей точкой. Результат возвращается в такой же форме.

    double(arg) √ переводит аргумент в десятичное число в плавающей точкой.

     int(arg)√ переводит аргумент в целое число, обрезая дробную часть.

    rand() √ возвращает случайное десятичное число в интервале [0,1).
    Исходное значение, используемое при генерации, берется от внутренних часов или задается с помощью функции srand.

    round(arg) √ округляет число до целого.

    srand(arg) √ аргумент, который должен быть целым числом, используется для генерации последовательности случайных чисел. Возвращает первое случайное число из последовательности. Каждый интерпретатор может использовать собственное значение и порождать собственную последовательность случайных чисел.

    Пользовательские приложения могут определять дополнительные функции, используя процедуру Tcl_CreateMathFunc().
     

    ТИПЫ ДАННЫХ, ТОЧНОСТЬ ВЫЧИСЛЕНИЙ И ПЕРЕПОЛНЕНИЯ  
    Все внутренние вычисления с целыми числами выполняются с C-типом long, все внутренние вычисления с числами с плавающей запятой выполняются с C-типом double.

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

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

    Числа с плавающей запятой возвращаются либо с точкой, либо с буквой e, так что они заведомо не похожи на целые значения. Например:

    expr 5 / 4 вернет ▒1▓, тогда как expr 5 / 4.0

    expr 5 / ( [string length ⌠abcd■] + 0.0 )

    оба вернут ▒1.25▓.

    Выражение

    expr 20.0/5.0 вернет ▒4.0▓, а не ▒4▓.
    ОПЕРАЦИИ СО СТРОКАМИ  
    Операторы сравнения могут работать со строковыми аргументами, хотя при вычислении выражений аргументы по возможности интерпретируются как целые или числа с плавающей запятой. Если один из операндов строковый, а другой ≈ число, то числовой операнд будет конвертирован в строковый. Например, обе команды expr {■0x03■ > ⌠2■}

    expr {■0y■ < ⌠0x12■}

    вернут ▒1▓. При этом первое сравнение будет выполнено как сравнение чисел, а второе будет выполнено как сравнение строк, после того как второй операнд будет преобразован в строку ▒18▓.

    Если необходимо сравнить аргументы именно как строки, а операнды могут быть восприняты неоднозначно, то рекомендуется использовать команду string compare вместо операторов вида '=='.
     

    ПРОИЗВОДИТЕЛЬНОСТЬ ПРИЛОЖЕНИЙ  
    Байтовый компилятор Tcl генерирует наиболее быстрый и компактный код, если выражения заключать в скобки. Это связано с тем, что в общем случае, в выражениях подстановки выполняются дважды: один раз ≈ грамматическим анализатором Tcl, и второй раз ≈ командой expr. Наиболее трудным является случай, когда выражение без фигурных скобок содержит подстановки команд.

    fblocked
    Проверяет, что предыдущая операция ввода исчерпала всю информацию для ввода.
    СИНТАКСИС   fblocked channelId ОПИСАНИЕ   Команда fblocked возвращает ▒1▓, если последняя операция ввода по каналу channelId возвратила меньше информации, чем было запрошено, поскольку вся доступная информация уже исчерпана. Например, если команда gets вызвана, когда для ввода доступны только три символа без символов конца строки, команда gets вернет пустую строку, последующий вызов команды fblocked вернет 1. См. также gets и read.
     
     
     
     


    Fconfigure


    fconfigure ≈ устанавливает и читает опции канала.   СИНТАКСИС   fconfigure channelId

    fconfigure channelId name

    fconfigure channelId name value?name value...?

     
    ОПИСАНИЕ   Команда fconfigure устанавливает и читает опции каналов. Аргумент channelId определяет конкретный канал, с которым работает команда. Если аргументы name и value отсутствуют, команда возвращает список, содержащий поочередно имена опций и их значения для канала. Если имя опции указано, а значение ≈ нет, команда возвращает текущее значение указанной опции. Если в команде указаны одна или больше пар имен и значений, то команда устанавливает каждой из перечисленных опций указанное значение. В этом случае команда возвращает пустую строку.   Описанные ниже опции поддерживаются для всех типов каналов. Кроме того, каждый тип канала может иметь дополнительно собственные опции. Они приведены в описаниях команд создания каналов, например, в описании команды socket.   -blocking boolean Опция -blocking определяет, вызывают ли команды ввода/вывода блокировку процесса. Величина этой опции должна быть правильным булевым выражением. Обычно каналы открываются в блокирующем режиме. Если канал переведен в неблокирующий режим, это окажет влияние на выполнение команд gets, read, puts, flush и close (смотри описание соответствующих команд). Чтобы работа в неблокиоующем режиме выполнялась корректно, в приложении должен быть запущен обработчик событий (например, с помощью команды vwait). -buffering newValue Если аргумент newValue равен full, система ввода-вывода будет накапливать вывод в буфере, пока буфер не заполнится целиком. После этого буфер будет выдан в канал.   Если аргумент newValue равен line, система ввода-вывода будет выдавать буфер в канал каждый раз при поступлении символа конца строки.

    Если аргумент newValue равен none, система ввода-вывода будет выводить каждый символ сразу после его поступления.

    Значение по умолчанию full для всех каналов, кроме устройств типа терминалов. Для них значение по умолчанию line.

    -buffersize newSize Аргумент newSize должен быть целым числом. Его значение определяет размер буфера (в байтах), используемый для данного канала. Величина newSize должна быть в пределах от десяти до миллиона, что позволяет задавать величину буфера от десяти до миллиона байт. -eofcharchar

    -eofchar {inChar outChar}

    Эти опции поддерживают структуру файлов DOS, в которой символ Control-z (\x1a) используется как символ конца файла. Если аргумент char не равен пустой строке, то этот символ, если он встречается во вводе, означает конец файла. При выводе информации символ конца файла выдается при закрытии канала. Если аргумент char равен пустой строке, то специальный символ конца файла отсутствует. Для каналов ввода-вывода элементы списка {inChar outChar} определяют символы конца файла для ввода и вывода соответственно. Пользователь может указать в списке единственный символ, который будет использоваться и для ввода, и для вывода. Однако, при запросе команда возвратит текущие установки в виде списка из двух одинаковых элементов. Значения по умолчанию для символов конца файла ≈ пустая строка всегда, кроме файлов Windows. В этом случае inChar равно Control-z (\x1a), outChar ≈ пустой строке. -translation mode

    -translation{inMode outMode}

    В Tcl-скриптах конец строки всегда представляется единственным символом новой строки (\n). Однако, в реальных файлах и устройствах конец строки может быть представлен разными символами или наборами символов в зависимости от используемой платформы или даже конкретного устройства. Например, на UNIX- платформах символ новой строки используется в файлах, в то время как для сетевых соединений используется последовательность ⌠возврат каретки ≈ новая строка■. При вводе данных (например, при исполнении команд gets или read) система ввода ≈ вывода Tcl сама автоматически преобразует внешнее представление конца строк во внутреннее представление (символ новой строки). При выводе (например, при команде puts) также происходит преобразование ко внешнему формату представления конца строки. Значение аргумента по умолчанию равно auto. При этом символы конца строки для большинства ситуаций правильно определяются автоматически. Однако, опция -translation позволяет при необходимости задать соответствующие символы в явном виде.

    Аргумент mode задает представление конца строки для каналов, открытых только на чтение или только на запись. Список {inMode outMode} определяет представление конца строки для каналов ввода ≈ вывода. Пользователь может указать в списке единственный символ, который будет использоваться и для ввода, и для вывода. Однако, при запросе команда возвратит текущие установки в виде списка из двух одинаковых элементов.

    Поддерживаются следующие значения опции:

     
    auto При вводе в качестве конца строки могут использоваться символ возврата каретки (cr), символ новой строки (lf), или их последовательность (crlf). Причем разные строки могут заканчиваться по-разному. Все эти представления будут переведены в символ новой строки. При выводе используется разное представление для различных платформ и каналов. Для сетевых соединений на всех платформах используется crlf, для всех Unix- платформ ≈ lf, для Macintosh ≈ cr, а для всех Windows-платформ ≈ crlf. binary Никакого преобразования символов конца строки не производится. Это значение опции очень схоже со значением lf, однако, при значении binary пустая строка воспринимается как конец файла (см. описание опции -eofchar). cr В качестве символа конца строки используется возврат каретки (cr). Соответственно, при вводе символ возврата каретки преобразуется в символ новой строки, а при выводе, наоборот, символ новой строки преобразуется в символ возврата каретки. Это значение опции используется, обычно, на Macintosh-платформах. crlf В качестве символа конца строки используется последовательность ⌠возврат каретки ≈ новая строка■ (crlf). Соответственно, при вводе последовательность ⌠возврат каретки ≈ новая строка■ преобразуется в символ новой строки, а при выводе, наоборот, символ новой строки преобразуется в последовательность ⌠возврат каретки ≈ новая строка■. Это значение опции используется обычно на Windows-платформах и при сетевых соединениях. lf В качестве символа конца строки используется символ новой строки (lf). Никакого преобразования символов конца строки при вводе и выводе не происходит. Это значение опции используется, обычно, на UNIX-платформах.
    См. также close(n), flush(n), gets(n), puts(n), read(n), socket(n)


    fcopy

    Копирует данные из одного канала в другой.


    СИНТАКСИС

      fcopy inchan outchan?-size size??-command callback?   ОПИСАНИЕ Команда fcopy копирует данные из одного канала ввода ≈ вывода, заданного идентификатором канала inchan, в другой канал ввода ≈ вывода, заданный идентификатором канала outchan. Команда позволяет упростить буфферизацию и избежать излишнего копирования в Tcl-системе ввода ≈ вывода, а также избежать использования больших объемов памяти при копировании данных по таким медленным каналам, как сетевые соединения.

    Команда fcopy передает данные из канала inchan, пока не будет достигнут конец файла или не будет передано size байтов. Если аргумент -size не задан, передается весь файл. Если опция -command не задана, команда блокирует процесс до завершения копирования и возвращает число переданных байтов.

    При наличии аргумента -command команда fcopy работает в фоновом режиме. Она завершается немедленно, а команда callback вызывается позже, когда завершается процесс копирования. Команда callback вызывается с одним или двумя дополнительными аргументами, которые указывают число переданных байтов. Если при исполнении фонового процесса произошла ошибка, второй аргумент ≈ строка описания ошибки. При фоновом выполнении копирования каналы inchan и outchan не обязательно открывать в неблокирующем режиме, команда fcopy выполнит это автоматически. Однако при этом необходимо организовать обработку событий, например, с помощью команды vwait или используя Tk.

    Не допускается выполнение других операций ввода ≈ вывода с теми же каналами во время фонового копирования. Если один из каналов во время копирования будет закрыт, процесс копирования будет прерван и вызова команды callback не произойдет. Если будет закрыт канал ввода данных, то все полученные данные, хранящиеся в очереди, будут выданы в выходной канал.

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

    Команда fcopy преобразует символы конца строк в соответствии со значениями опций -translation для соответствующих каналов (см. описание команды fconfigure). Преобразование означает, в частности, что число прочитанных и число переданных символов может отличаться. В синхронном режиме команда возвращает только число переданных в outchan канал символов. В фоновом режиме только это число подается на вход команды callback.
     

    ПРИМЕРЫ Первый пример показывает, как в фоновом режиме получить число переданных байтов. Конечно, это показательный пример, поскольку то же самое может быть сделано проще без использования фонового режима.
      proc Cleanup {in out bytes {error {}}} {
    global total
    set total $bytes
    close $in
    сlose $out
    if {[string length $error]!= 0} { # error occurred during the copy
    }
    }
    #### Открыть файл на чтение
    set in [open $file1]
    #### Открыть сетевое соединение
    set out [socket $server $port]
    #### Скопировать, по окончании копирования вызвать Cleanup
    fcopy $in $out -command [list Cleanup $in $out]
    #### Ожидать завершения копирования
    vwait total
    Второй пример показывает, как можно организовать копирование файла по фрагментам и проверять конец файла.
      proc CopyMore {in out chunk bytes {error {}}} { global total done
    incr total $bytes
    if {([string length $error]!= 0) || [eof $in] {
    set done $total
    close $in
    close $out
    } else { fcopy $in $out -command [list CopyMore $in $out $chunk] \ -size $chunk } }
    set in [open $file1]
    set out [socket $server $port]
    #### Установить размер фрагмента для копирования.
    set chunk 1024
    set total 0
    fcopy $in $out -command [list CopyMore $in $out $chunk] -size $chunk
    vwait done
    См. также eof(n), fblocked(n), fconfigure(n)
     
     


    file

    Команда для работы с файлами и их именами.
    СИНТАКСИС file option name?arg arg...? ОПИСАНИЕ Эта команда осуществляет различные действия с файлами, их именами или свойствами. Аргумент name содержит имя файла. Если он начинается с символа ⌠~■, то перед выполнением команды выполняются ⌠тильда■-подстановки, как описано в filename . Опция команды указывает, какие действия необходимо выполнить с файлом. Ниже приведены возможные опции. В команде их имена могут быть сокращены до уровня, сохраняющего уникальность их имен.

    file atimename

    Возвращает десятичную строку, содержащую время последнего доступа к файлу name. Время представляется стандартным для POSIX образом в числе секунд от фиксированного начального момента (обычно, с 1 января 1970 г.). Если файл не существует или время последнего доступа не может быть получено, выдается сообщение об ошибке. file attributes name

    file attributes name?option?

    file attributes name?option value option value...?

    Эта подкоманда возвращает или устанавливает зависящие от платформы атрибуты файла. Первая форма возвращает список атрибутов и их значений, вторая возвращает значение указанного атрибута, а третья ≈ позволяет установить значения одного или нескольких атрибутов. Возможные атрибуты перечислены ниже. НА UNIX-ПЛАТФОРМАХ:   -group ≈ возвращает или устанавливает имя группы. В команде группа может быть задана числовым идентификатором, но возвращается всегда имя группы.

    -owner ≈ возвращает или устанавливает имя ⌠хозяина■ файла. В команде хозяин может быть задан числовым идентификатором, но возвращается всегда имя хозяина.

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


    НА WINDOWS-ПЛАТФОРМАХ
     

    На Windows-платформах поддерживаются атрибуты -archive, -hidden, -longname (атрибут не может быть установлен), -readonly, -shortname (атрибут не может быть установлен), -system. НА MACINTOSH-ПЛАТФОРМАХ
      На Macintosh-платформах поддерживаются атрибуты-creator, -hidden, -readonly, -type.


    file copy?-force??--? source target

    file copy ?-force??--? source?source...? targetDir

    Первая форма используется для того, чтобы скопировать файл или каталог source соответственно в файл или каталог target. Вторая форма используется, чтобы скопировать файл(ы) или каталог(и) внутрь существующего каталога targetDir. Если один из аргументов source есть имя каталога, то этот каталог копируется рекурсивно вместе со всем его содержимым. При копировании существующие файлы не перезаписываются, если только не указана опция -force. Попытки перезаписать непустой каталог, а также перезаписать каталог файлом или файл каталогом приводят к ошибке, даже если опция -force указана. Аргументы команды обрабатываются в порядке перечисления до первой ошибки. Отметка ⌠--■ означает конец опций. Следующий аргумент считается именем файла или каталога, даже если он начинается с символа ⌠-■. file delete ?-force??--? pathname?pathname...? Удаляет файлы или каталоги, заданные аргументами pathname. Непустые каталоги удаляются, только если задана опция -force. Попытка удалить несуществующий файл не рассматривается как ошибка. Попытка удалить файл, доступный только для чтения, приведет к удаления файла, даже если опция -force не задана. Аргументы команды обрабатываются в порядке перечисления до первой ошибки. Отметка ⌠--■ означает конец опций. Следующий аргумент считается именем файла или каталога, даже если он начинается с символа ⌠-■. filedirname name Возвращает имя, составленное из всех элементов name, кроме последнего. Если name ≈ относительное имя файла и состоит из единственного элемента, возвращает ⌠.■ (■:■ для Macintosh). Если имя указывает на корневой каталог, возвращается имя корневого каталога.
    Например: file dirname c:/ вернет ▒c:/▓.

    ⌠Тильда■-подстановки выполняются, только если они необходимы для формирования правильного результата.

    Например:

    file dirname ~/src/foo.c вернет ▒~/src▓, тогда как file dirname ~ вернет ▒/home▓ (или что-то подобное).
    file executable name Возвращает ▒1▓, если файл name исполнимый, и ▒0▓ в противном случае. file exists name Возвращает ▒1▓, если файл name существует, и пользователь имеет права на просмотр каталога, в котором лежит файл, и ▒0▓ в противном случае. file extension name Возвращает все символы в name, начиная с последней точки в последнем элементе. Если в последнем элементе нет точек, возвращается пустая строка. file isdirectory name Возвращает ▒1▓, если name ≈ имя каталога, и ▒0▓ в противном случае. file isfile name Возвращает ▒1▓, если файл name ≈ регулярный файл, и ▒0▓ в противном случае.


    file join name?name...?

    Соединяет аргументы name в одно имя с помощью разделителя, используемого на данной платформе. Если очередной аргумент name представляет собой относительное имя, он присоединяется к предыдущим, в противном случае предыдущие аргументы отбрасываются, и процесс формирования имени начинается заново с текущего аргумента.
    Например: file join a b /foo bar вернет ▒/foo/bar▓.

    Аргументы name могут содержать разделитель, это не помешает получить правильный результат для используемой платформы (■/■ для Unix и Windows, ⌠:■ для Macintosh).


    file lstat name varName

    То же самое, что опция stat, описанная ниже, за исключением того, что используется команда ядра lstat вместо stat. Это означает, что если name есть имя связи, то команда вернет данные о связи, а не об исходном файле. Для платформ, не поддерживающих связи, команды полностью идентичны. file mkdir  dir?dir...? Создает все перечисленные каталоги. Для каждого аргумента dir команда создает все несуществующие родительские каталоги и сам каталог dir. Если указан существующий каталог, ничего не происходит. При этом команда считается выполненной успешно. Попытка перезаписать существующий файл каталогом приведет к ошибке. Аргументы команды обрабатываются в порядке перечисления до первой ошибки. file mtimename Возвращает десятичную строку, содержащую время последнего изменения файла name. Время представляется стандартным для POSIX образом в числе секунд от фиксированного начального момента (обычно, с 1 января 1970 г.). Если файл не существует или время последнего изменения не может быть получено, выдается сообщение об ошибке. file nativename name Возвращает имя файла в виде, характерном для используемой платформы. Опция полезна для подготовки исполнения файла с помощью команды exec под Windows. file owned name Возвращает ▒1▓, если файл name принадлежит пользователю, и 0 в противном случае. file pathtype name Возвращает одно из значений absolute, relative, volumerelative. Если name указывает на определенный файл в определенном томе, возвращается absolute. Если name указывает на имя файла относительно текущего рабочего каталога ≈ возвращается relative. Если name указывает имя файла относительно текущего рабочего каталога в определенном томе или на определенный файл в текущем рабочем томе, возвращается volumerelative. file readable name Возвращает ▒1▓, если файл name доступен для чтения пользователю, и ▒0▓ в противном случае. file readlink name Возвращает имя связи name (например, имя файла, на который указывает name). Если name не есть связь, или ее невозможно прочитать, возвращает ошибку. На платформах, на которых связи не поддерживаются, опция не определена. file rename ?-force??--? source target

    file rename ?-force??--? source?source...? targetDir

    Первая форма используется для того, чтобы переименовать файл или каталог source соответственно в файл или каталог target (и переместить их в соответствующий каталог, если это необходимо). Вторая форма используется, чтобы переместить файл(ы) или каталог(и) внутрь существующего каталога targetDir. Если один из аргументов source есть имя каталога, то этот каталог перемещается рекурсивно вместе со всем его содержимым. При перемещении существующие файлы не перезаписываются, если только не указана опция -force. Попытки перезаписать непустой каталог, а также перезаписать каталог файлом или файл каталогом приводят к ошибке, даже если опция -force указана. Аргументы команды обрабатываются в порядке перечисления до первой ошибки. Отметка ⌠-■ означает конец опций. Следующий аргумент считается именем файла или каталога, даже если он начинается с символа ⌠-■. file rootname name Возвращает все символы в name за исключением последней точки в последнем элементе. Если в последнем элементе нет точек, возвращается name. file size name Возвращает десятичную строку, содержащую размер файла в байтах. Если файл не существует или его размер не может быть получен, выдается ошибка. file split name Возвращает список элементов пути name. Первый элемент списка при этом имеет тот же тип пути, что и name. Все остальные элементы ≈ относительные. Разделители удаляются, если только они не необходимы для указания на относительный тип элементов. Например, под Unix file split /foo/~bar/baz вернет ▒/ foo./~bar baz▓, чтобы гарантировать, что последующие команды не попытаются выполнить ⌠тильда■- подстановку в третьем элементе file stat name varName Исполняет вызов функции ядра stat и записывает возвращаемую информацию о name в элементы массива varName. Формируются следующие элементы массива: atime, ctime, dev, gid, ino, mode, mtime, nlink, size, type, uid. Значения всех элементов, кроме type, ≈ десятичные строки. Описания их приведены в описании команды ядра stat. Элемент type содержит тип файла в том же виде, в каком он возвращается командой file type. Команда file stat возвращает пустую строку. file tail name Возвращает все символы в name после последнего разделителя каталогов. Если в name нет каталогов, возвращает name. file type name Возвращает строку, содержащую тип файла. Возможные значения file, directory, characterSpecial, blockSpecial, fifo, link или socket. file volume Возвращает список, содержащий абсолютные пути ко всем подмонтированным томам. На Macintosh-платформах это список всех подмонтированных дисков, локальных и сетевых. На Unix-платформах команда всегда возвращает '/', поскольку все файловые системы монтируются как локальные. На Windows-платформах команда возвращает список локальных дисков (например, {a:/ c:/}). file writable name Возвращает ▒1▓, если файл name доступен для записи, и ▒0▓ в противном случае.  
    ПРОБЛЕМЫ ПЕРЕНОСИМОСТИ Unix

    На Unix-платформах эти команды всегда используют реальные, а не эффективные идентификаторы пользователя и группы.

    См. также filemane.


    fileevent
    Исполняет скрипт, когда канал открывается на чтение или запись.
    СИНТАКСИС
    fileevent channelId readable?script?

    fileevent channelId writable?script?

    ОПИСАНИЕ
    Эта команда используется для создания обработчиков файловых событий. Обработчик файловых событий связывает канал и скрипт таким образом, что скрипт исполняется, когда канал открывается на чтение или запись. Обработчики файловых событий используются, чтобы получение данных от другого процесса управлялось событиями. При этом получающий процесс, ожидая поступление данных, сможет продолжать взаимодействовать с пользователем. Если приложение выполняет команду get или read из блокирующего канала, оно не способно обслуживать другие события, поэтому оно кажется пользователю ⌠замороженным■. С использованием файловых событий процесс обратится к команде get или read только когда информация поступит в канал.
    Аргумент channelId должен быть идентификатором открытого канала, который вернула предыдущая команда open или socket. Если в команде присутствует аргумент script, команда создает новый обработчик событий: скрипт script будет выполнен, когда канал channelId откроется на чтение или запись (в зависимости от второго аргумента команды). В такой форме команда возвращает пустую строку. Обработчики для обработки открытия файла на чтение или запись соответственно независимы и могут создаваться и удаляться по одному, независимо один от другого. Однако для каждого из событий может быть только один обработчик, так что если команда fileevent выполняется, когда соответствующий обработчик (в текущем интерпретаторе) уже задан, новый скрипт заменит старый.
    Если аргумент script не задан, команда fileevent возвратит скрипт, заданный для данного события для канала channelId, или пустую строку, если скрипт не задан. Обработчик событий удаляется автоматически при закрытии канала или удалении интерпретатора.
    Канал считается открытым на чтение, если на соответствующем устройстве есть непрочитанные данные. Также канал считается открытым на чтение, если есть непрочитанные данные во входном буфере, кроме того случая, когда команда get  не смогла найти в буфере законченную строку. Эта особенность позволяет читать файл построчно в неблокирующем режиме, используя обработчик событий. Канал также считается открытым на чтение, если достигнут конец соответствующего файла или на соответствующем устройстве сгенерирована ошибка. Поэтому скрипт должен уметь распознавать и корректно обрабатывать такие ситуации, чтобы не возникало зацикливаний, когда скрипт не может прочитать данные, завершается и тут же вызывается вновь.
    Канал считается открытым на запись, если по крайней мере один байт данных может быть записан в соответствующий файл или передан на соответствующее устройство, или на устройстве (в файле) сгенерирована ошибка.
    Событийно управляемый ввод ≈ вывод лучше всего работает с каналами, переведенными в неблокирующий режим с помощью команды fconfigure. В блокирующем режиме команды puts, get  или read могут заблокировать процесс, если они не могут быть выполнены сразу (например, при попытке прочитать больше данных, чем доступно в настоящий момент). При этом никакой обработки событий не происходит. В неблокирующем режиме команды puts, get  или read никогда не блокируют процесс. Детальное описание работы команд с блокирующими и неблокирующими каналами приведено в описаниях соответствующих команд.
    Скрипт обработчика файловых событий выполняется на самом верхнем уровне вне контекста какой-либо процедуры в интерпретаторе, в котором обработчик событий был задан. Если при исполнении скрипта происходит ошибка, сообщение о ней выдается с помощью процедуры bgerror. Кроме того, при ошибке соответствующий обработчик событий удаляется. Это делается для того, чтобы избежать зацикливания из-за ошибок в обработчике.

    filename
    Правила именования файлов в Tcl.
     
  • Введение
  • Типы путей
  • Синтаксис путей
  • "Тильда"-подстановки
  • Вопросы перносимости
  • ВВЕДЕНИЕ Все команды Tcl и процедуры С, использующие имена файлов в качестве аргументов, позволяют использовать имена в форме, установленной для данной платформы. Кроме того, на всех платформах Tcl поддерживается синтаксис UNIX с целью предоставления удобного способа составления простых имен файлов. Тем не менее, скрипты, предназначенные для переноса между платформами, не должны пользоваться конкретной формой имен файлов. Вместо этого такие скрипты должны использовать команды file split и file join для преобразования имен к нужной форме. ТИПЫ ПУТЕЙ
    Все имена файлов поделены на три типа, в зависимости от начальной точки для отсчета пути: абсолютные, относительные и имена внутри тома (volume-relative).

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

    Для определения типа указанного пути можно использовать команду file pathtype.

    СИНТАКСИС ПУТЕЙ
    Пути формируются различным образом для различных платформ. Текущая платформа определяется по значению переменной tcl_platform(platform):
    mac
    Для Macintosh-платформ Tcl поддерживает две формы представления путей: с двоеточием, в обычном для Macintosh стиле, и со слешем, в Unix-стиле. Если путь не содержит двоеточий, то он считается путем в в Unix-стиле. При этом ⌠.■ означает текущий каталог, ⌠..■ ≈ родительский каталог для текущего каталога. Однако такие имена, как ▒/▓' или ▒/..▓ считаются именами каталогов в Macintosh-стиле. При этом команды, генерирующие имена файлов, возвращают их в Macintosh-стиле, тогда как команды, использующие имена файлов, могут получать их и в Macintosh-стиле, и в Unix-стиле. unix На Unix-платформах используются пути, которые содержат компоненты, разделенные символом слеш. Пути могут быть абсолютными или относительными, имена файлов могут содержать любые символы, кроме слеша. Имена файлов. и. являются специальными и обозначают текущий каталог и родительский каталог текущего каталога, соответственно. Несколько слешей подряд понимаются как один разделитель. Ниже приведено несколько примеров различных типов путей:

    /

    Абсолютный путь к корневому каталогу. /etc/passwd Абсолютный путь к файлу passwd к каталогу etc в корневом каталоге. . Относительный путь к текущему каталогу. foo Относительный путь к файлу foo в текущем каталоге foo/bar Относительный путь к файлу bar в подкаталоге fooтекущего каталога ../foo Относительный путь к файлу foo в каталоге над текущим. windows Для Windows-платформ Tcl поддерживает дисковые и сетевые имена. В обоих типах имен можно использовать в качестве разделителя как прямой, так и обратный слеш. Дисковые имена состоят из (при необходимости) имени диска и последующего абсолютного или относительного пути. Сетевые пути обычно имеют вид \\servername\sharename\path\file. В обеих формах ⌠.■ и ⌠..■ ссылаются соответственно на текущий каталог и его предка.
    "ТИЛЬДА"-ПОДСТАНОВКИ
    В дополнение к правилам, описанным выше, Tcl позволяет использовать ⌠тильда■ -подстановки в стиле cshell. Если имя файла начинается с ▒~▓, за которой сразу следует сепаратор, она заменяется на значение переменной окружения $HOME. В противном случае символы от ⌠тильды■ до следующего разделителя интерпретируются как имя пользователя и заменяются на имя домашнего каталога пользователя.
    На Macintosh- и Windows-платформах ⌠тильда■-подстановки с именем пользователя не поддерживаются. При попытке использовать такое имя файла выдается ошибка. Однако ⌠тильда■ без имени пользователя заменяется, как и на Unix-платформах, на значение переменной окружения $HOME.
    ВОПРОСЫ ПЕРЕНОСИМОСТИ
    При разработке переносимых приложений необходимо учитывать, что не все файловые системы различают заглавные и прописные буквы. Поэтому следует избегать использования имен файлов, различающихся только регистром букв. Кроме того, необходимо отказаться от использования символов, имеющих специальное назначение хотя бы на одной из платформ, например, ▒<▒, ▒>▒, ▒:▓,▓ ■ ▒, ▒/\▓, ▒|▓. А также, если предполагается использовать программу на Windows 3.1, необходимо учитывать, что имена файлов при этом должны быть ограничены восемью буквами, а расширения ≈ тремя.

    flush
    Команда организует немедленную выдачу выходных данных в канал.
    СИНТАНСИС  
    flush channelId
    ОПИСАНИЕ Команда направляет накопленные в выходном буфере данные в канал с идентификатором channelId (значение идентификатора возвращается командами открытия канала open или socket), который должен быть открыт для записи. Если канал находится в блокирующем режиме, то команда будет оставаться незавершенной до тех пор, пока все содержимое буфера не будет отправлено в канал. Если канал находится в неблокирующем режиме, то команда может завершиться до окончания отправки выходных данных в канал. Остающиеся данные будут передаваться в канал в фоновом режиме с такой скоростью, с какой назначенный каналу файл или устройство сможет принимать их.

    for
    Команда for организует цикл.
    СИНТАНСИС  
    for start test next body
    ОПИСАНИЕ
    Команда for является командой цикла. По структуре команда for похожа на аналогичную команду языка С. Здесь аргументы start, next и body должны быть командными строками Tcl, а test ≈ строкой выражения. Сначала команда for запускает интерпретатор Tcl для выполнения start. Затем она вычисляет значение выражения test; если оно не равно нулю, то запускает Tcl-интерпретатор для выполнения body, затем next. Цикл повторяется до тех пор, пока test не станет равно 0. Если при выполнении body будет выполнена команда continue, то последующие команды в body пропускаются и начинает выполняться next, затем test и т.д. Если при исполнении body или next встретится команда break, исполнение команды for немедленно прекращается. Команда for возвращает пустую строку.
    Замечание. Строку test почти всегда следует помещать в фигурные скобки. В противном случае подстановки переменных будут выполнены до выполнения команды. Из-за этого измененное в ходе цикла значение переменной может перестать передаваться в выражение, что может породить бесконечный цикл. Если же строка test заключена в фигурные скобки, подстановка значения переменных выполняется в каждом цикле. Для примера можно выполнить следующий скрипт со скобками и без скобок вокруг выражения $x<10:
    for {set x 0} {$x<10} {incr x} { puts ⌠x is $x■ }

    foreach
    Команда цикла по элементам одного или нескольких списков.
     
     
  •  Синтаксис
  •  Описание
  •  Примеры
  • СИНТАНСИС foreach varname list body

    foreach varlist1 list1?varlist2 list2...? body

    ОПИСАНИЕ Команда организует выполнение цикла, в котором переменные цикла последовательно принимают все значения из списков значений. В простейшем случае имеется одна переменная цикла varname и один список значений list для присвоения переменной цикла. Аргумент body есть скрипт Tcl. Для каждого элемента списка list, по очереди с первого до последнего, foreach присваивает содержимое очередного элемента списка переменной varname и затем вызывает интерпретатор Tcl для исполнения body.
    В общем случае в команде может быть указано несколько списков значений (например, list1 и list2), и каждый из них может быть связан с одной переменной или со списком переменных цикла (например, varlist1 и varlist2). Во время каждой итерации переменные каждого списка переменных принимают значения последовательных элементов соответствующего списка значений. Значения из списков значений используются последовательно от первого до последнего, и каждое значение используется только один раз. Общее число итераций выбирается таким, чтобы использовать все значения из всех списков значений. Если список значений не содержит достаточного числа значений для всех связанных с ним переменных цикла, вместо недостающих элементов используются пустые значения.
    Внутри скрипта body можно использовать команды break и continue, аналогично команде for.
    Команда foreachвозвращает пустую строку.
    ПРИМЕРЫ
    В цикле используются переменные цикла i и j для цикла по элементам одного списка
    set x {}
    foreach {i j} {a b c d e f} { lappend x $j $i }
    В результате величина x равна ⌠b a d c f e■.

    При вычислении цикла используются три итерации.

    В цикле переменные цикла i и j используются для различных списков значений.
    set x {}
    foreach i {a b c} j {d e f g} { lappend x $i $j }
    В результате величина x равна ⌠a d b e c f {} g■.

    При вычислении цикла используются четыре итерации.

    Обе предыдущие формы скомбинированы в следующем цикле

    set x {}
    foreach i {a b c} {j k} {d e f g} { lappend x $i $j $k }
    В результате величина x равна ⌠a d e b f g c {} {}■.
    При вычислении цикла используются три итерации.

    format
    Команда форматирует строку в стиле процедуры sprintf.
  •   Синтаксиc
  •   Введение
  •   Процесс формирования
  •   Указатель позиции
  •   Флаги преобразования
  •   Минимальная  ширина поля
  •   Точность
  •   Преобразователь длины
  •   Тип преобразования
  •   Отличия от ANSI SPRINTF
  • СИНТАНСИС
    format formatString?arg arg...?
    ВВЕДЕНИЕ Данная команда создает и возвращает программе форматированную строку так же, как это делает процедура ANSI C sprintf (эта процедура используется в реализации команды). Подобно sprintf, formatString указывает с помощью спецификаторов преобразований,как именно сформатировать результат, а возможные дополнительные аргументы предназначены для подстановки в результат.
    Команда немного отличается от sprintf в части отдельных спецификаторов и ключей.
    ПРОЦЕСС ФОРМИРОВАНИЯ Команда просматривает строку formatString слева направо. Все символы из строки непосредственно переносятся в результирующую строку, кроме символа ▒% и следующих непосредственно за ним. Такая последовательность символов рассматривается как спецификатор преобразования. Этот спецификатор управляет преобразованием очередного аргумента arg в указанный формат, после чего тот добавляется к результирующей строке вместо соответствующего спецификатора. Если в строке formatString содержится несколько спецификаторов, каждый из них управляет преобразованием одного дополнительного аргумента. Число таких аргументов должно быть достаточным для всех спецификаторов в строке.
    Каждый из спецификаторов преобразования может содержать до шести различных частей: указатель позиции, набор флагов, минимальная ширина поля, точность, преобразователь длины и тип преобразования. Любые из полей, кроме типа преобразования, могут отсутствовать. Ниже обсуждаются соответствующие разделы спецификаторов.
    УКАЗАТЕЛЬ ПОЗИЦИИ
    Если за символом ▒%▓ следуют целое число и знак ▒$, как например в ▒%2$d▓, то величина для преобразования берется не из следующего аргумента, а из аргумента, занимающего соответствующую позицию в списке (▒1▓ соответствует первому аргументу arg). Если спецификатор преобразования требует нескольких аргументов (когда он содержит символ ▒*▓), то используются последовательные аргументы, начиная с указанного. Если один из спецификаторов содержит указание позиции аргумента, то и все остальные спецификаторы должны его содержать.
    ФЛАГИ ПРЕОБРАЗОВАНИЯ Второй раздел спецификатора может содержать в произвольном порядке любые флаги из перечисленных ниже.
     
    Указывает, что соответствующий аргумент будет выровнен влево (числа обычно выравниваются вправо с добавлением лидирующих пробелов при необходимости).
    + Указывает, что числа всегда будут вставлены со знаком, даже если они положительные.
    space Указывает, что перед числом будет добавлен пробел, если первый символ не знак.
    0 Указывает, что число будет выровнено с добавлением лидирующих нулей.
    # Указывает на использование альтернативной формы вывода. Для ▒o▓ и ▒O▓ преобразований гарантирует, что первой цифрой всегда будет ▒0▓. Для ▒x▓ и ▒X▓ преобразований ≈ что 0x или 0X соответственно будет добавлен в начало числа. Для ▒e▓, ▒E▓, ▒f▓, ▒g▓, и ▒G▓ ≈ что в числе будет использована десятичная точка. Для ▒g▓ и ▒G▓ ≈ что конечные нули не будут отброшены.
    МИНИМАЛЬНАЯ ШИРИНА ПОЛЯ Третья часть спецификатора преобразования представляет собой число, задающее минимальную ширину поля для данного преобразования. Обычно она используется для формирования данных в таблицу. Если преобразуемое значение не содержит указанного числа символов, одно будет дополнено до необходимого размера. Обычно поле заполняется пробелами слева, однако, указанные выше флаги '0' и '≈' позволяют заполнять его нулями слева или пробелами справа. Если минимальная ширина поля указана как ▒*▓, а не как число, то в качестве числового значения используется значение следующего аргумента в команде. ТОЧНОСТЬ
    Четвертая часть спецификатора определяет точность представления чисел. Она состоит из точки и последующего числа. Число имеет различный смысл при различных преобразованиях. Для ▒e▓, ▒E▓ и ▒f▓ преобразования оно определяет число цифр справа от десятичной точки. Для ▒g▓ и ▒G▓ ≈ общее число чисел слева и справа от десятичной точки (однако, конечные нули будут обрезаться, если не указан флаг ▒#▓). Для целочисленных преобразований оно определяет минимальное число символов (при необходимости будут добавляться лидирующие нули). Для ▒s▓ преобразований определяет максимальное число символов, которое будет выводиться. Если строка длиннее, конечные символы будут отброшены. Если точность указана как ▒*▓, а не как число, то в качестве числового значения используется значение следующего аргумента в команде.
    ПРЕОБРАЗОВАТЕЛЬ ДЛИНЫ Пятая часть спецификатора может принимать значения ▒h▓или ▒l▓. Значение ▒h▓ означает, что все числовые значения предварительно обрезаются до 16 бит. Значение ▒l▓ означает, что никаких предварительных преобразований не производится. ТИП ПРЕОБРАЗОВАНИЯ
    Последняя часть спецификатора представляет собой букву, которая определяет тип преобразования. Допускаются следующие значения.
     
    Преобразует целое число в десятичную строку со знаком.
    Преобразует целое число в десятичную строку без знака.
    i Преобразует целое число в десятичную строку со знаком. Целое может быть десятичным, восьмеричным (с 0 вначале) или шестнадцатеричным (с 0x вначале).
    o Преобразует целое число в восьмеричную строку без знака.
    x or X Преобразует целое число в шестнадцатеричную строку без знака. Используются символы `0123456789abcdef'' для x и ``0123456789ABCDEF'' для X.
    c Преобразует целое число в восьмибитный символ, который оно представляет.
    s Не преобразует, но просто вставляет строку
    f Преобразует число с плавающей точкой в десятичное со знаком в форме xx.yyy, где число символов после запятой определяется точностью.
    e or E Преобразует число с плавающей точкой в число в экспоненциальной форме x.yyye╠zz, где число символов после запятой определяется точностью (по умолчанию 6). Для E в записи числа используется Eвместо e.
    g or G Если порядок числа меньше √4 или больше, чем точность, или равен точности, преобразует число с плавающей точкой как ▒%e▓ или ▒%E▓. В противном случае преобразует как ▒%f▓. 
    % Просто подставляет символ ▒%▓.

     

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

    ОТЛИЧИЯ ОТ ANSI SPRINTF
    Поведение команды format отличается от процедуры sprintf в следующих моментах:

    %p▓ и ▒%n▓ типы не поддерживаются

    Для ▒%c▓ аргумент должен быть десятичным числом.

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



    gets

    Команда читает строку из канала. СИНТАКСИС gets channelId?varName? ОПИСАНИЕ Команда gets читает из канала channelId очередную строку символов. Если имя переменной varName не задано, тогда команда возвращает полученную строку за исключением символов конца строки. Если varName задано, тогда команда записывает полученную строку в переменную и возвращает количество символов в принятой строке.
    Если при поиске конца строки был обнаружен конец файла, команда возвращает всю полученную информацию вплоть до конца файла.

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

    Если указана переменная varName и возвращается пустая строка из-за конца файла или из-за неполноты полученной строки, команда возвращает √1.

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

    См. также  eof и fblocked .



    glob

    Команда возвращает имена файлов, удовлетворяющих шаблону.
    СИНТАКСИС glob ?switches? pattern?pattern ┘? ОПИСАНИЕ
    Команда glob выполняет поиск имен файлов подобно тому, как это делает оболочка csh, и возвращает список имен, удовлетворяющих шаблону pattern. Аргументы, начинающиеся со знака ▒-▓, являются управляющими ключами switches.
    Возможные ключи:  
    -nocomplain Позволяет вернуть пустой список без генерации ошибки. Если ключ не задан, то при пустом списке формируется ошибка. -- Означает конец ключей. Аргумент после этого ключа считается шаблоном, даже если он начинается с ▒-▓. Шаблоны могут включать следующие специальные символы:

    ? √ Удовлетворяет любому символу;

    * ≈ Удовлетворяет любой последовательности из нуля или больше символов;

    [chars] √ Удовлетворяет любому символу из chars. Если chars включает последовательность символов типа ▒a-b▓, то удовлетворяет всем символам от ▒a▓ до ▒b▓ (включительно).

    \x √ Удовлетворяет символу ▒x▓.

    {a,b,...} √ Удовлетворяет любой из строк ▒a▓, ▒b▓, и т.д.
     

    Как и в csh, символ ▒.▓ в начале имени файла или сразу после ▒/▓ должен соответствовать явно или с помощью конструкции ⌠{}■.

    Если первый символ образца ▒~▓, то он указывает на домашний каталог пользователя, чье имя указано после ▒~▓. Если сразу после ▒~▓ идет ▒/▓, то используется значение переменной окружения HOME.

    Действие команды glob отличается от работы в csh в следующем:

    ОСОБЕННОСТИ РАБОТЫ НА РАЗЛИЧНЫХ ПЛАТФОРМАХ
    В отличие от другихTcl-команд команда glob может работать с именами файлов только в нотации, поддерживаемой на той платформе, на которой она исполняется. Кроме того, на Windows-платформах специальные символы не допустимы в сетевых именах.
     

    global
    Команда для объявления глобальных переменных.
    СИНТАКСИС global varname?varname ┘? ОПИСАНИЕ
    Данная команда выполняется только при выполнении процедуры, а в остальных случаях игнорируется. Команда объявляет переменныеvarname глобальными. Глобальные переменные ≈ это переменные глобальной области имен.
    Только в течение работы данной процедуры и только при выполнении в данной процедуре любая ссылка на значение любого из аргументов varname будет указывать на одноименную глобальную переменную.

    См. также namespace(n), variable(n) 
     
     
     


    history
    Команда работает со списком выполнявшихся команд. СИНТАКСИС history?option??arg arg ┘? ОПИСАНИЕ Команда history выполняет действия по отношению к недавно выполненным командам, занесенным в журнал. Каждая из этих зарегистрированных команд обозначается термином ⌠событие■. Ссылаться на события в команде history можно одним из следующих способов:

    Число. Если положительное ≈ ссылается на событие с этим номером (все события нумеруются начиная с 1). Если число отрицательное, то оно указывает номер события относительно текущего (▒-1▓ ≈ предыдущее, ▒-2▓ ≈ перед предыдущим и т.д.). Событие ▒0▓ ссылается на текущее событие.

    Строка. Ссылается на наиболее позднее событие, которое удовлетворяет строке. Событие удовлетворяет строке, если оно начинается со строки, или в соответствии с правилами команды string match.

    Команда history может принимать одну из следующих форм.

    history

    То же самое, что команда history info, описанная ниже.
    history addcommand?exec?
    Добавляет аргумент command в журнал как новое событие. Если присутствует аргумент exec(или произвольное сокращение), то команда command выполняется и возвращается ее результат. В противном случае возвращается пустая строка. history change newValue?event? Заменяет описание события event на newValue. Аргумент event определяет событие, описание которого будет заменено. По умолчанию ≈ текущее событие (даже не предыдущее!). Эта форма команды предназначается для использования в тех случаях, когда переформировывается журнал событий и позволяет заменить текущее событие (переформирование журнала) на необходимое. Команда возвращает пустую строку. history clear Удаляет журнал событий. Количество запоминаемых событий (см. history keep) сохраняется. Нумерация событий начинается сначала. history event?event? Возвращает описания события event. Значение по умолчанию ▒-1▓.
    history info?count?
    Возвращает в удобном для чтения виде список, состоящий из номеров и описаний событий (кроме текущего). Если аргумент count задан, то только count последних событий возвращаются. history keep?count? Команда изменяет размер журнала на count событий. Исходно в журнале сохраняются 20 последних событий. Если аргумент count не указан, команда возвращает текущее значение размера журнала. history nextid Возвращает номер следующего события, которое будет записано в журнал. Полезно, например, для вывода номера события в приглашении командной строки. history redo?event? Повторно выполняет команду, указанную с помощью аргумента event. Значение аргумента по умолчанию ▒-1▓. Эта команда вызывает переформирование журнала, см. ниже.   ПЕРЕФОРМИРОВАНИЕ ЖУРНАЛА
    До версии 8.0 Tcl имел весьма сложный механизм переформирования журнала. Новый механизм несколько сокращен за счет старых опций substitute и words. (Взамен добавлена новая опция clear)

    Опция redo позволяет переформировывать журнал значительно проще. При ее выполнении последнее событие изменяется таким образом, что удаляется ⌠служебная■ команда history, которая реально выполнялась, а вместо нее записывается та команда, которая необходима.

    Если вы хотите повторить прежнюю команду, не модифицируя журнал, выполните сначала команду history event, чтобы извлечь описание команды, а затем history add, чтобы выполнить ее.

     

    if
    Команда if проверяет соблюдение условия в ходе выполнения скрипта.
      СИНТАКСИС if expr1?then? body1elseifexpr2?then? body2elseif ┘?else??bodyN? ОПИСАНИЕ Команда вычисляет значение выражения expr1 (Точно так, как это делает команда expr). Это и все остальные выражения expr должны быть булева типа (то есть это должна быть числовая величина, причем 0 соответствует false, а все остальные значения √ true, либо строка со значениями true или yes для true и false или no для false). Если выражение равно true, то скрипт body1 передается на выполнение интерпретатору Tcl. Если нет, то вычисляется значение выражения expr2, и если оно равно true, то исполняется body2, и так далее. Если ни одно из выражений не равно true, тогда выполняется bodyN.

    Слова then и else необязательны и используются только для простоты понимания команды. Аргумент bodyNтакже может отсутствовать, если отсутствует else.

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


    incr
    Команда увеличивает значение переменной на заданную величину. СИНТАКСИС incr varName?increment? ОПИСАНИЕ Команда incr увеличивает значение переменной varName на величину increment. И значение переменной, и increment должны быть целыми числами. По умолчанию increment равно 1. Новое значение переменной сохраняется в виде десятичной строки и одновременно возвращается командой.  

    info
    Команда сообщает сведения о состоянии интерпретатора Tcl.
    СИНТАКСИС
    info option?arg arg...?
    ОПИСАНИЕ
    Эта команда обеспечивает доступ к внутренней информации Tcl-интерпретатора. Ниже перечислены поддерживаемые опции (имена которых могут быть сокращены).
    info argsprocname
    Возвращает список имен аргументов процедуры procname в том порядке, в котором они определены при описании процедуры. Аргумент procname должен содержать имя Tcl-процедуры. info body procname
      Возвращает тело процедуры procname. Аргумент procname должен содержать имя Tcl-процедуры.


    info cmdcount

    Возвращает полное число команд, введенных в данный интерпретатор. info commands?pattern? Если аргумент pattern не задан, возвращает полный список команд в текущем пространстве имен, включая как встроенные команды, написанные на C, так и процедуры, заданные с помощью команды proc. Если аргумент pattern задан, возвращается список только тех имен, которые удовлетворяют шаблону pattern. Правила использования шаблонов такие же, как в команде string match. Шаблон может быть полным именем, например Foo::print*. То есть он может задавать определенное пространство имен и шаблон в нем. В этом случае каждая команда в возвращаемом списке будет представлена полным именем с указанием пространства имен. info complete command Возвращает ▒1▓, если команда command есть завершенная Tcl-команда, то есть не содержит ⌠незакрытых■ кавычек, квадратных или фигурных скобок и имен массивов. В противном случае возвращается ▒0▓. Эта команда обычно используется при построчном вводе команд пользователем для того, чтобы позволить ему вводить команды из нескольких строк. Для этого, если введенный скрипт не представляет собой законченную команду, его исполнение откладывается до завершения следующей строки. info default procname arg varname
    Аргумент procname должен быть именем Tcl-процедуры, а аргумент arg ≈ именем одного из аргументов этой процедуры. Если указанный аргумент не имеет значения по умолчанию, команда возвращает ▒0▓. В противном случае команда возвращает ▒1▓ и помещает значение по умолчанию в переменную varname.
    info exists varName
    Возвращает ▒1▓, если переменная varName существует в текущем контексте как локальная или как глобальная переменная. В противном случае возвращает ▒0▓. info globals?pattern?
      Если аргумент pattern не задан, возвращает список имен определенных в данный момент глобальных переменных (переменных, определенных в глобальном пространстве имен). Если шаблон задан, возвращаются только имена, удовлетворяющие шаблону. Правила использования шаблонов такие же, как в команде string match. info hostname
      Возвращает имя компьютера, на котором выполняется этот вызов. info level ?number?
      Если аргумент number не задан, возвращает уровень стека выполняемой процедуры, или ▒0▓, если команда выполняется на верхнем уровне. Если аргумент number указан, команда возвращает список, состоящий из имени и аргументов процедуры, находящейся в стеке вызовов на соответствующем месте. Если number положительное число, оно указывает номер уровня в стеке (▒1▓ ≈ самая верхняя вызванная процедура, ▒2▓ ≈ процедура, вызванная из процедуры ▒1▓, и так далее), если же number отрицательное, оно указывает уровень относительно уровня выполняемой процедуры ('0▓ ≈ выполняемая процедура, ▒-1▓ ≈ процедура, из которой вызвана исполняемая, и так далее). Более подробно уровни стека описаны в  uplevel . info library Возвращает имя каталога, в котором хранятся стандартные Tcl-скрипты. Обычно совпадает со значением переменной tcl_library и может быть изменено с помощью переопределения этой переменной. Дополнительная информация приведена в   tclvars info loaded?interp? Возвращает список библиотек (package), загруженных в интерпретатор с помощью команды load. Каждый элемент списка представляет собой подсписок из двух элементов: имени файла и имени библиотеки. Для статически загруженных библиотек имя файла отсутствует. Если имя интерпретатора interp отсутствует, возвращается список всех библиотек, загруженных во все интерпретаторы. Чтобы получить список библиотек, загруженных в текущий интерпретатор, используйте пустую строку в качестве аргумента interp. info locals?pattern? Если образец не задан, возвращает имена всех определенных в текущий момент локальных переменных, включая аргументы процедуры, если они есть. Переменные, заданные с помощью команд global и upvar, не возвращаются. Если шаблон задан, возвращаются только имена, удовлетворяющие шаблону. Правила использования шаблонов такие же, как в команде string match. info nameofexecutable
      Возвращает полное имя бинарного файла, с помощью которого приложение было запущено. Если Tcl не может определить файл, возвращается пустая строка. info patchlevel
      Возвращает значение глобальной переменной tcl_patchLevel. См. также раздел  tclvars. info procs?pattern?
      Если аргумент pattern не задан, возвращает полный список Tcl-процедур в текущем пространстве имен. Если аргумент pattern задан, возвращается список только тех имен, которые удовлетворяют шаблону pattern. Правила использования шаблонов такие же, как в команде string match. info script Если в данный момент обрабатывается Tcl-скрипт (например, вызванный с помощью команды source), то команда возвращает имя файла, содержащего самый внутренний обрабатываемый скрипт. В противном случае возвращает пустую строку. info sharedlibextension
      Возвращает расширение, используемое на текущей платформе для файлов разделяемых библиотек (например,.so для Solaris). Если разделяемые библиотеки на текущей платформе не поддерживаются, возвращает пустую строку. info tclversion
      Возвращает значение глобальной переменной tcl_version. Дополнительная информация приведена в tclvars. info vars?pattern?
    Если аргумент pattern не задан, возвращает список имен всех видимых в текущий момент переменных, включая локальные и видимые глобальные. Если аргумент pattern задан, возвращается список только тех имен, которые удовлетворяют шаблону pattern. Правила использования шаблонов такие же, как в команде string match. Шаблон может быть полным именем, например Foo::option*. То есть он может задавать определенное пространство имен и шаблон в нем. В этом случае каждая команда в возвращаемом списке будет представлена полным именем с указанием пространства имен.
    interp
    Команда создает и управляет Tcl-интерпретаторами.
    СИНТАКСИС
    interp option?arg arg...?
    ОПИСАНИЕ
    Эта команда позволяет создавать один или несколько новых Tcl-интерпретаторов, которые сосуществуют в одном приложении с создавшим их интерпретатором. Создавший интерпретатор называется мастер-интерпретатором, а созданные интерпретаторы называются подчиненными (slave) интерпретаторами. Мастер-интерпретатор может создавать произвольное число подчиненных интерпретаторов, а каждый из подчиненных может в свою очередь создавать подчиненные интерпретаторы, для которых он сам является мастер-интерпретатором. В результате в приложении может создаваться иерархия интерпретаторов.
    Каждый интерпретатор независим от остальных. Он имеет собственное пространство имен для команд, процедур и глобальных переменных. Мастер-интерпретатор может создавать связи между подчиненными интерпретаторами и собой, используя механизм алиасов. Алиас ≈ это команда в подчиненном интерпретаторе, которая, при ее вызове, вызывает другую команду в мастер-интерпретаторе или в другом подчиненном интерпретаторе. Кроме механизма алиасов, связь между интерпретаторами поддерживается только через переменные окружения. Массив envобычно является общим для всех интерпретаторов в приложении. Необходимо заметить, что идентификаторы каналов (например, идентификатор, возвращаемый командой open) больше не разделяются между интерпретаторами, как это было в предыдущих версиях Tcl. Чтобы обеспечить совместный доступ к каналам, необходимо использовать явные команды для передачи идентификаторов каналов из интерпретатора в интерпретатор.
    Команда interp позволяет также создавать надежные интерпретаторы. Надежный интерпретатор ≈ это интерпретатор с существенно урезанной функциональностью, поэтому он может исполнять ненадежные скрипты без риска нарушить работу вызывающего их приложения. Например, из безопасных интерпретаторов недоступны команды создания каналов и подпроцессов. Более подробно см. ⌠Безопасные интерпретаторы■. Опасная функциональность не удалена из безопасных интерпретаторов, но скрыта таким образом, что только надежные интерпретаторы могут получить к ней доступ. Более подробно см. ⌠Скрытые команды■. Механизм алиасов может быть использован для безопасного взаимодействия между подчиненным интерпретатором и его мастер-интерпретатором. Более подробно этот вопрос обсуждается в разделе "Использованиеалиасов".
    Полное имя интерпретатора представляет собой список, содержащий имена его предков в иерархии интерпретаторов и заканчивающийся именем интерпретатора в его непосредственном предке. Имена интерпретаторов в списке ≈ это их относительные имена в их непосредственных мастер-интерпретаторах. Например, если a есть подчиненный интерпретатор текущего интерпретатора и, в свою очередь, имеет подчиненный интерпретатор a1, а тот, в свою очередь, имеет подчиненный интерпретатор a11, то полное имя a11 в a есть список {a1 a11}.
    В качестве аргумента описанной ниже команды interp используется полное имя интерпретатора. Интерпретатор, в котором исполняется команда, всегда обозначается как {} (пустая строка). Обратите внимание, что в подчиненном интерпретаторе невозможно сослаться на мастер-интерпретатор кроме как через алиасы. Также нет никакого имени, под которому можно было бы сослаться на мастер-интерпретатор, первым созданный в приложении. Оба ограничения вызваны соображениями безопасности.
    КОМАНДА INTERP
    Команда interp используется для создания, удаления и выполнения команд в подчиненном интерпретаторе, а также для разделения или передачи каналов между интерпретаторами. Она может иметь одну из перечисленных ниже форм в зависимости от значения аргумента option.
    interp alias srcPath srcCmd
    Возвращает список, состоящий из исходной команды и аргументов, связанных с алиасом srcCmd в интерпретатореsrcPath (возвращаются значения, использовавшиеся при создании алиаса, так как имя команды могло быть изменено с помощью команды rename). interp alias srcPath srcCmd {} Удаляет алиас srcCmd в подчиненном интерпретаторе srcPath. Имя srcCmd ≈ это имя, под которым алиас был создан. Если созданная команда была переименована, то будет удалена переименованная команда. interp alias srcPath srcCmd targetPath targetCmd?arg arg...?
    Эта команда создает алиас между двумя подчиненными интерпретаторами (для создания алиаса между подчиненным интерпретатором и мастер-интерпретатором используется команда slave alias). Оба интерпретатора srcPath и targetPath должны быть в иерархии интерпретаторов ниже того интерпретатора, в котором выполняется команда. Аргументы srcPath и srcCmd задают интерпретатор, в котором будет создан алиас и его имя. Аргумент srcPath должен быть Tcl-списком, задающим имя существующего интерпретатора. Например, ⌠a b'' определяет интерпретатор b, который является подчиненным интерпретатором интерпретатора a, который в свою очередь является подчиненным интерпретатором текущего интерпретатора. Пустой список соответствует текущему интерпретатору (в котором исполняется команда). Аргумент srcCmd определяет имя новой команды-алиаса, которая будет создана в интерпретаторе srcPath. Аргументы targetPath и targetCmd определяют целевой интерпретатор и команду, а аргументы arg, если они есть, определяют дополнительные аргументы для команды targetCmd, которые будут вставлены перед аргументами, заданным при вызове srcCmd. Команда targetCmd может как существовать, так и не существовать в момент создания алиаса. В последнем случае она не создается командой interp alias.
    Алиас позволяет использовать команду targetCmd в интерпретаторе targetPath каждый раз, когда вызывается команда-алиасsrcCmd в интерпретаторе srcPath. Подробнее см. ⌠Использование алиасов■. interp aliases?path? Эта команда возвращает список имен всех команд-алиасов, определенных в интерпретаторе path. interp create?-safe??--??path? Создает подчиненный интерпретатор с именем path и новую команду для работы с этим интерпретатором, называемую также подчиненной (slave) командой. Имя подчиненной команды совпадает с последним элементом списка path. Новый подчиненный интерпретатор и подчиненная команда создаются в интерпретаторе, имя которого состоит из всех элементов списка path, кроме последнего. Например, если аргумент path равен a b c, то в результате в интерпретаторе a b будет создан подчиненный интерпретатор c и подчиненная команда c. Синтаксис подчиненной команды описан ниже см. ⌠Команда работы с интерпретатором■. Если аргумент path отсутствует, Tcl создает уникальное имя в форме interpx, где x ≈ целое число, и использует его для подчиненного интерпретатора и подчиненной команды. Если в команде указана опция -safe или если мастер-интерпретатор сам является безопасным интерпретатором, новый подчиненный интерпретатор будет безопасным, то есть с ограниченной функциональностью. В противном случае новый интерпретатор будет включать полный набор встроенных Tcl-команд и переменных. Аргумент - используется для того, чтобы обозначить конец опций. Следующий аргумент будет использоваться как имя интерпретатора, даже если он равен -safe.

    Команда interp create возвращает имя нового интерпретатора. Имя подчиненного интерпретатора должно быть уникальным среди подчиненных интерпретаторов его мастера. Если у мастер-идентификатора уже существу
     

    interp delete?path...? Удаляет ноль или больше интерпретаторов с именем path. Для каждого удаляемого интерпретатора удаляются также его подчиненные интерпретаторы. Если для одного из аргументов path интерпретатора с таким именем не существует, команда генерирует ошибку. interp eval path arg?arg...? Команда объединяет все аргументы так же, как команда concat, а затем исполняет сформированный скрипт в подчиненном интерпретаторе, заданном аргументом path. Результат выполнения (включая информацию об ошибках в переменных errorInfo и errorCode, если произошла ошибка) возвращается в вызывающий интерпретатор. interp exists path Возвращает ▒1▓, если подчиненный интерпретатор с именем path существует в его мастер-интерпретаторе. В противном случае возвращает ▒0▓. Если аргумент path представляет относительное имя, то он ищется в том интерпретаторе, в котором выполняется команда. interp expose path hiddenName?exposedCmdName? Разрешает использование в интерпретаторе path скрытой команды hiddenName под новым именем exposedCmdName (в настоящее время поддерживаются только имена в глобальном пространстве имен, не содержащие ⌠::■). Если обычная (не скрытая) команда exposedCmdName уже существует, генерируется сообщение об ошибке. Скрытые команды обсуждаются подробно см. ⌠Скрытые команды■. interp hidepath exposedCmdName?hiddenCmdName? Запрещает использование в интерпретаторе path обычной команды exposedCmdName и переименовывает ее в скрытую команду hiddenCmdName (или в скрытую команду под старым именем, если новое не было задано). Если скрытая команда с заданным именем уже существует, команда возвращает ошибку. В настоящее время exposedCmdName и hiddenCmdName не могут содержать ⌠::■. Команды, которые должны быть скрыты с помощью interp hide, ищутся только в глобальном пространстве имен, даже если текущее пространство имен не глобальное. Скрытые команды обсуждаются подробно ниже (см. ⌠Скрытые команды■). interp hidden path Возвращает список скрытых команд интерпретатора path. interp invokehidden path?-global? hiddenCmdName?arg...? Вызывает в интерпретаторе path скрытую команду hiddenCmdName с перечисленными аргументами. Никаких подстановок или вычислений в аргументах не производится. Если указана опция -global, скрытая команда выполняется на глобальном уровне в целевом интерпретаторе. В противном случае она выполняется в текущем контексте и может использовать значения локальных переменных и переменных из вышестоящих стеков. Скрытые команды обсуждаются подробно в соответствующем разделе ниже. interp issafe?path? Возвращает ▒1▓, если интерпретатор path безопасный, и ▒0▓ в противном случае. interp marktrusted path Отмечает интерпретатор path как надежный. Не раскрывает скрытые команды. Команда interp marktrusted может выполняться только из надежного интерпретатора. Если интерпретатор path уже надежный, команда не оказывает никакого воздействия. interp share srcPath channelId destPath Позволяет разделить канал ввода ≈ вывода channelId между интерпретаторами srcPath и destPath. Оба интерпретатора после этого будут иметь одинаковые права на канал. Каналы ввода ≈ вывода, доступные в интерпретаторе, автоматически закрываются, когда удаляется интерпретатор. interp slaves?path? Возвращает список подчиненных интерпретаторов для интерпретатора path. Если аргумент path отсутствует, возвращает список подчиненных интерпретаторов для интерпретатора, в котором выполняется команда. interp target path alias Возвращает список, описывающий целевой интерпретатор (интерпретатор, в котором выполняется реальная команда при вызове команды-алиаса) для алиаса alias. Алиас задается именем интерпретатора path и команды-алиаса alias как в команде interp alias выше. Имя целевого интерпретатора возвращается как имя интерпретатора относительно имени интерпретатора, в котором выполняется команда. Если это текущий интерпретатор, то возвращается пустой список. Если этот интерпретатор не является потомком интерпретатора, в котором выполняется команда, генерируется ошибка. Реальная команда не обязана быть определена в момент выполнения данной команды. interp transfer srcPath channelId destPath Делает канал ввода ≈ вывода channelId доступным в интерпретаторе destPath и недоступным в интерпретаторе srcPath.
    КОМАНДА РАБОТЫ С ИНТЕРПРЕТАТОРОМ (ПОДЧИНЕННАЯ КОМАНДА)
    Для каждого подчиненного интерпретатора, созданного с помощью команды interp, в мастер-интерпретаторе создается команда с тем же именем, что и подчиненный интерпретатор. Эта команда предназначена для выполнения различных операций в подчиненном интерпретаторе. В общем случае она имеет следующий вид:
    slave command?arg arg...?

    где slave ≈ имя подчиненного интерпретатора, а аргументы command и arg arg... определяют конкретное назначение команды. Ниже перечислены возможные формы команды.

    slave aliases

    Возвращает список всех алиасов в подчиненном интерпретаторе slave. Возвращаемые имена ≈ это имена, использовавшиеся при создании соответствующих алиасов. Они могут не совпадать с текущими именами команд, если те были переименованы. slave alias srcCmd Возвращает список, состоящий из имени реальной команды и ее аргументов, ассоциированных с алиасом srcCmd. Возвращаются те же значения, что и в команде создания алиаса. Если созданный алиас был переименован, то в команде надо указывать имя srcCmd, которое использовалось при создании алиаса. slave alias srcCmd {} Удаляет алиас srcCmd в подчиненном интерпретаторе. Аргумент srcCmd указывает имя алиаса в момент создания. Если после этого он был переименован, удалится переименованная команда. slave alias srcCmd targetCmd?arg..? Эта команда создает команду ≈ алиас в подчиненном интерпретаторе. Каждый раз, когда в подчиненном интерпретаторе будет вызываться команда srcCmd, реально выполняться будет команда targetCmd в мастер-интерпретаторе. Аргументы arg, если они есть, определяют дополнительные аргументы для команды targetCmd, которые будут вставлены перед аргументами, заданными при вызове srcCmd. Подробнее см. ⌠Использование алиасов■. slave eval arg?arg..? Эта команда объединяет все свои аргументы так же, как команда concat, и выполняет сформированный таким образом скрипт в подчиненном интерпретаторе. Результат выполнения (включая информацию об ошибках в переменных errorInfoи errorCode, если произошла ошибка) возвращается в вызывающий интерпретатор. slave expose hiddenName?exposedCmdName? Разрешает использование в подчиненном интерпретаторе скрытой команды hiddenName под новым именем exposedCmdName (в настоящее время поддерживаются только имена в глобальном пространстве имен, не содержащие ⌠::■). Если обычная (не скрытая) команда exposedCmdName уже существует, генерируется сообщение об ошибке. Скрытые команды обсуждаются ниже (см. ■Скрытые команды ■). slave hide exposedCmdName?hiddenCmdName? Запрещает использование в подчиненном интерпретаторе обычной команды exposedCmdName и переименовывает ее в скрытую команду hiddenCmdName (или в скрытую команду под старым именем, если новое не было задано). Если скрытая команда с заданным именем уже существует, команда возвращает ошибку. В настоящее время exposedCmdName и hiddenCmdName не могут содержать ⌠::■. Команды, которые должны быть скрыты с помощью interp hide, ищутся только в глобальном пространстве имен, даже если текущее пространство имен не глобальное. Скрытые команды обсуждаются ниже (см. ■Скрытые команды ■). slave hidden Возвращает список скрытых команд в подчиненном интерпретаторе. slave invokehidden?-global hiddenName?arg..? Вызывает в подчиненном интерпретаторе скрытую команду hiddenCmdName с перечисленными аргументами. Никаких подстановок или вычислений в аргументах не производится. Если указана опция -global, скрытая команда выполняется на глобальном уровне в подчиненном интерпретаторе. В противном случае она выполняется в текущем контексте и может использовать значения локальных переменных и переменных из вышестоящих стеков. Скрытые команды обсуждаются подробно в соответствующем разделе ниже. slave issafe Возвращает ▒1▓, если подчиненный интерпретатор безопасный, и ▒0▓ в противном случае. slave marktrusted Отмечает подчиненный интерпретатор как надежный. Не раскрывает скрытые команды. Команда может выполняться только из надежного интерпретатора. Если подчиненный интерпретатор уже надежный, команда не оказывает никакого воздействия.
    БЕЗОПАСНЫЕ ИНТЕРПРЕТАТОРЫ
    Безопасный интерпретатор ≈ это интерпретатор с ограниченной функциональностью. Поэтому в нем можно без опасений выполнять произвольные скрипты, даже написанные вашим злейшим врагом, не опасаясь нарушить выполнение вашего приложения или испортить содержимое дисков вашего компьютера. Чтобы обеспечить безопасность, из таких интерпретаторов удалены определенные команды и переменные. Например, команда создания файлов на диске и команда запуска подпроцессов. Тем не менее, в безопасном интерпретаторе можно обеспечить ограниченный доступ к подобным командам с помощью механизма алиасов. В результате при выполнении потенциально опасных команд будут вызываться специально написанные процедуры в мастер-интерпретаторе, которые могут тщательно проверять заданные аргументы и позволять использовать только ограниченный набор средств. Например, создание файлов может быть разрешено только в ограниченном наборе подкаталогов, а запуск подпроцессов разрешен только для ограниченного (и фиксированного) набора хорошо проверенных программ.
    Чтобы создаваемый интерпретатор был безопасным, необходимо при его создании указать опцию -safe. Кроме того, любой интерпретатор, созданный из безопасного интерпретатора, также будет безопасным.
    Безопасный интерпретатор создается со следующим набором команд:
     
     
    after append array  break case
    catch  clock concat continue eof
    error eval expr fblocked fileevent
    flush for foreach format gets
    global history if incr info
    interp join lappend lindex linsert
    list llength lower lrange lreplace
    lsearch lsort package pid proc
    puts read rename return scan
    seek set split string subst
    switch tell trace unset update
    uplevel upvar vwait while  
             
    Следующие команды в безопасном интерпретаторе скрыты:
     
     
    cd exec exit fconfigure
    file glob load open
    pwd socket source

    Эти команды могут быть созданы заново как Tcl-процедуры или алиасы или разрешены к использованию с помощью команды interp expose.

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

    Расширения, загружаемые в безопасный интерпретатор, также обладают ограниченной функциональностью. Более подробно эти вопросы обсуждаются в пп. Safe-Tcl и load .

    ИСПОЛЬЗОВАНИЕ АЛИАСОВ
    Механизм алиасов весьма тщательно спроектирован таким образом, чтобы он позволял без опасений выполнять ненадежные скрипты в безопасных подчиненных интерпретаторах, используя для алиасов проверенные команды в мастер-интерпретаторах. Для обеспечения безопасности принципиально важно, чтобы информация из подчиненного интерпретатора никогда не обрабатывалась (то есть скрипты не исполнялись, и в них не производились подстановки) в мастер-интерпретаторе. В противном случае всегда будет оставаться возможность написать такой скрипт для подчиненного интерпретатора, который выполнил бы произвольные действия в мастер-интерпретаторе и мог бы нарушить его безопасность.

    Когда в подчиненном интерпретаторе вызывается команда-алиас, необходимые Tcl-подстановки в аргументах выполняются там же, как для обычной Tcl-команды. После этого аргументы объединяются с целевой командой и ее аргументами, определенными при создании алиаса. Так, если команда вызова алиаса имела вид ``srcCmd arg1 arg2... argN'', то сформируется команда `targetCmd arg arg... arg arg1 arg2... argN'', где arg arg... arg √ аргументы, указанные при создании алиаса. После этого сформированная команда выполняется в целевом интерпретаторе (со сформированным набором аргументов). Если в целевом интерпретаторе нет команды targetCmd, будет сгенерирована ошибка. Перед выполнением команды в целевом интерпретаторе больше никаких подстановок в аргументах произведено не будет. Команда будет вызвана напрямую, а не через обычный механизм выполнения. Таким образом, подстановки в каждом слове команды оказываются выполненными ровно один раз: в targetCmd и arg... arg √ при выполнении команды, с помощью которой был создан алиас, а в arg1 ≈ argN ≈ при анализе команды алиаса в соответствующем интерпретаторе.

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

    СКРЫТЫЕ КОМАНДЫ
    Безопасные интерпретаторы существенно ограничивают функциональные возможности выполняемых в них Tcl-скриптов. С одной стороны, это позволяет избежать нежелательных последствий при их исполнении, но, с другой стороны, рано или поздно возникает насущная необходимость выполнить потенциально опасную команду в безопасном интерпретаторе. Например, прочитать дополнительный скрипт с помощью команды source. Или выполнить в Tk-приложении некоторые команды управления окнами.

    Команда interp обеспечивает решение этой проблемы с помощью механизма скрытых команд. Потенциально опасные команды не удаляются из безопасного интерпретатора, а становятся скрытыми. При этом их невозможно выполнить из скрипта, выполняемого ⌠внутри■ интерпретатора. Но их можно выполнить ⌠извне■ из любого надежного предка интерпретатора с помощью команды interp invoke. Скрытые и обычные (не скрытые) команды размещаются в различных пространствах имен. Это позволяет иметь в одном интерпретаторе скрытую и обычную команды с одним и тем же именем.

    Скрытые команды могут использоваться в теле процедуры, использованной при определении алиаса. Например, в подчиненном интерпретаторе можно создать алиас source. Вызываемая при этом процедура в мастер-интерпретаторе проверяет допустимость запрошенной операции (например, что запрошенный файл находится в соответствующем каталоге, к которому разрешен доступ из подчиненного интерпретатора) и вызывает в подчиненном интерпретаторе скрытую команду source. Обратите внимание, что в этом случае в подчиненном интерпретаторе существует две команды source: скрытая и алиас.

    Из мастер-интерпретатора возможен вызов скрытых команд подчиненного интерпретатора через механизм алиасов. Поэтому в теле процедур, предназначенных для создания алиаса, необходимо избегать подстановок и команд исполнения для аргументов. См. ⌠Использование алиасов■ .

    Безопасные интерпретаторы не могут ⌠изнутри■ вызвать скрытую команду в себе или своих потомках.

    Множество скрытых команд может быть изменено из надежного интерпретатора с помощью команд interp expose и interp hide. Безопасный интерпретатор не может изменить набор скрытых команд в себе или своих потомках.

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



    join

    Команда соединяет элементы списка в одну строку. СИНТАКСИС join list ?joinString? ОПИСАНИЕ Команда возвращает строковое значение, состоящее из всех элементов спискаlist, отделенных друг от друга символом joinString. Список list должен быть Tcl-списком, joinString по умолчанию есть пробел.
    lappend
    Команда дополняет переменную элементами списка. СИНТАКСИС lappend varName?value value value ┘? ОПИСАНИЕ Команда добавляет в список varName каждый из аргументов value как новый элемент, отделенный пробелом. Если varName не существует, то он будет создан с элементами, заданными value. Команда lappend подобна команде append, за исключением того, что аргументы добавляются в качестве элементов списка, а не просто текста. С помощью этой команды можно эффективно создавать большие списки. Например, для больших списков команда lappend a $b намного эффективнее, чем set a [concat $a [list $b]]'
     
     

    library
    Команды стандартной библиотеки процедур Tcl.
    СИНТАКСИС auto_execok cmd

    auto_loadcmd

    auto_mkindex dir pattern pattern

    auto_reset

    parray arrayName

    tcl_endOfWordstr start

    tcl_startOfNextWord str start

    tcl_startOfPreviousWord str start

    tcl_wordBreakAfter str start

    tcl_wordBreakBefore str start
     

    ОПИСАНИЕ Tcl содержит библиотеку Tcl-процедур общего назначения.

    Местонахождение библиотеки Tcl можно получить с помощью команды info library. Обычно, помимо этой библиотеки, приложения имеют собственные библиотеки служебных процедур. Местонахождение процедур приложения обычно содержит глобальная переменная $app_library, где app ≈ имя приложения. Например, для Tk это переменная $tk_library.

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

    source [file join [info library] init.tcl]

    Если в приложении процедура Tcl_AppInit вызывает библиотечную процедуру Tcl_Init, то такая команда выполняется автоматически. Код в файле init.tcl определит процедуру unknown и позволит остальным процедурам загружаться по требованию при помощи механизма автозагрузки, описанного ниже.
    КОМАНДНЫЕ ПРОЦЕДУРЫ Библиотека Tcl предоставляет пользователю следующие процедуры:
    auto_execok cmd Эта команда просматривает каталоги в текущем пути поиска (заданном переменной окружения PATH) и проверяет, есть ли в каталогах исполняемый файл по имени cmd. Если файл присутствует, то команда возвращает ▒1▓, если нет ≈ то ▒0▓. Команда запоминает сведения о предыдущем поиске в массиве auto_execs, это позволяет обходиться без поиска в каталогах при последующих вызовах этой же команды. Для удаления из памяти этой информации можно использовать команду auto_reset. auto_load cmd Эта команда загружает определение для Tcl-командыcmd. Для этого она просматривает путь автозагрузки, являющийся списком из одного или более каталогов. Он содержится в глобальной переменной auto_path, если она существует. В противном случае используется переменная окружения TCLLIBPATH. Если же и она не существует, список автозагрузки состоит из каталога, в котором находится Tcl-библиотека.

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

    Если команда была успешно загружена, то auto_load возвращает ▒1▓. Команда возвращает ▒0▓, если нужная команда не была найдена в списках команд или указанная команда загрузки не позволила создать команду (например, если файл tclIndex устарел). Если при выполнении указанного загрузочного скрипта возникла ошибка, команда возвращает ошибку.

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

    auto_mkindexdir pattern pattern...

    Команда создает индекс для использования его командой auto_load. Для этого команда просматривает каталог dir в поисках файлов с именами, удовлетворяющими аргументам pattern (сравнение выполняется командой glob), и создает индекс всех командных процедур Tcl, определенных в обнаруженных файлах, и сохраняет индекс в файле tclIndex в этой dir. Если не задано ни одного шаблона pattern, то по умолчанию принимается *.tcl. Например, команда auto_mkindex foo *.tcl просматривает все.tcl-файлы в каталоге foo и создает новый индексный файл foo/tclIndex.
    Команда auto_mkindex просматривает Tcl-скрипты очень простым способом: если в очередной строке, начиная с первого символа, написано слово proc, считается, что это определение процедуры, а следующее слово есть имя процедуры. Процедуры, определение которых не подходит под описанное (например, если перед словом proc стоят пробелы), не попадают в индексный файл.
    auto_reset Команда удаляет всю информацию, накопленную командами auto_execok и auto_load. При следующем обращении к этой информации она будет считана с диска заново. Эта команда также удаляет все процедуры, перечисленные в массиве auto_index, так что при следующем обращении к ним будут загружены новые копии. parrayarrayName Команда выдает на стандартный выход имена и значения элементов массива arrayName. Массив должен быть доступен в контексте вызова. Он может быть как локальным, так и глобальным. tcl_endOfWord str start Возвращает индекс первого конца слова после указанного индекса start в строке str. Первым концом слова считается первый символ, не принадлежащий слову, следующий за первым после начальной точки символом слова. Возвращает -1, если после начальной точки больше нет концов слова. Способ распознавания символов слов, используемый в Tcl, приведен в описании переменных tcl_wordchars и tcl_nonwordchars. tcl_startOfNextWordstr start Возвращает индекс первого начала слова после указанного индекса start в строке str. Первым началом слова считается первый символ слова, следующий за символом, не принадлежащим слову. Возвращает -1, если после начальной точки больше нет начала слова. tcl_startOfPreviousWordstr start Возвращает индекс первого начала слова до указанного индекса start в строке str. Возвращает  ▓-1▓, если после начальной точки больше нет начала слова. tcl_wordBreakAfterstr start Возвращает индекс первой границы слова после указанного индекса start в строке str. Возвращает ▒-1▓, если в указанной строке после начальной точки больше нет границ слова. Возвращаемый индекс относится ко второму символу пары, образующей границу. tcl_wordBreakBeforestr start Возвращает индекс первой границы слова до указанного индекса start в строке str. Возвращает ▒-1▓, если в указанной строке до начальной точки больше нет границ слова. Возвращаемый индекс относится ко второму символу пары, образующей границу.
    ПЕРЕМЕННЫЕ Процедуры Tcl используют или определяют следующие глобальные переменные.

    auto_execs ≈ используется командой auto_execok для записи информации о том, существуют ли конкретная команда в виде исполняемого файла.

    auto_index ≈ используется auto_load для сохранения индексной информации, считанной с диска.

    auto_noexec ≈ если переменная задана с любым значением, то команда unknown не будет пытаться автоматически исполнить какую-либо команду.

    auto_noload ≈ если переменная задана с любым значением, то команда unknown не будет пытаться автоматически загрузить какую-либо команду.

    auto_path ≈ если переменная задана, то она должна содержать Tcl-список с каталогами для просмотра при операциях автозагрузки.

    env(TCL_LIBRARY) ≈ если переменная задана, то она указывает местоположение каталога с библиотечными скриптами (команда info library возвращает значение этой переменной). Если переменная не определена, то используется значение по умолчанию.

    env(TCLLIBPATH) ≈ если переменная задана, то она должна содержать действующий Tcl список каталогов для поиска при операциях автозагрузки. Эта переменная используется только тогда, когда не определена переменная auto_path.

    tcl_nonwordchars ≈ переменная содержит регулярное выражение, используемое такими процедурами, как tcl_endOfWord для определения, является ли символ частью слова или нет. Если образец соответствует символу, то символ считается не принадлежащим к слову. В Unix такими символами являются все символы, кроме цифр, букв и символа подчеркивания.

    tcl_wordchars ≈ переменная содержит регулярное выражение, используемое такими процедурами, как tcl_endOfWord для определения, является ли символ частью слова или нет. Если образец соответствует символу, то символ считается частью слова. В Unix слова состоят из цифр, букв и символа подчеркивания.

    unknown_active ≈ эта переменная служит флагом для индикации активности команды unknown: команда сама устанавливает ее. Переменная используется для выявления ошибок, при которых unknown бесконечно рекурсивно обращается к себе. Перед окончанием работы unknown переменная сбрасывается.
     
     

    lindex


    Команда извлекает элемент списка.
    СИНТАКСИС lindex list index ОПИСАНИЕ Команда lindex считает list Tcl списком и возвращает index-ный элемент этого списка. Для index значение 0 соответствует первому элементу списка, а значение end ≈ последнему. При выполнении команды соблюдаются общие правила интерпретатора Tcl относительно фигурных скобок, двойных кавычек и обратного слеша, хотя подстановки переменных и команд не происходят.
    Если index отрицательное число или больше или равно числу элементов, команда возвращает пустое значение. Если значение аргумента index равно end, команда возвращает последний элемент списка.
     
     
     
     
    linsert





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

    СИНТАКСИС linsert list index element?element element ┘?


    ОПИСАНИЕ

    Данная команда создает из list новый список при помощи вставки аргументов element непосредственно перед index-ным элементом списка list. Каждый из аргументов element станет отдельным элементом нового списка.

    Если индекс index меньше или равен нулю, новые элементы вставляются в начало списка. Если индекс index больше или равен числу элементов в списке или равен end, новые элементы вставляются в конец списка.
     
     


    list
    Команда создает список. СИНТАКСИС list?arg arg ┘? ОПИСАНИЕ Команда list возвращает новый список из всех элементов arg или пустой список, если аргументы не указаны. При формировании списка по необходимости используются фигурные скобки и обратные слеши, что позволяет потом использовать команду index для извлечения исходных аргументов, а также использовать команду eval для исполнения результирующего списка, с arg1, содержащим имя команды, и остальными arg в качестве ее аргументов.

    Команда list несколько отличается от команды concat: тем, что  команда concat удаляет один уровень группирования перед образованием списка, тогда как команда list работает непосредственно с исходными аргументами. Например, команда

    list a b {c d e} {f {g h}}
    вернет a b {c d e} {f {g h}} Тогда как команда concat с теми же аргументами вернет
    a b c d e f {g h}
     


    llength

    Команда подсчитывает количество элементов в списке. СИНТАКСИС llength list ОПИСАНИЕ
    Аргумент list истолковывается как список; команда возвращает строку с десятичным числом, равным количеству элементов в этом списке.

    load
    Команда загружает машинный код и инициализирует новые команды. СИНТАКСИС load fileName

    load fileName packageName

    load fileName packageName interp

    ОПИСАНИЕ Эта команда загружает двоичный код из файла в адресное пространство приложения и вызывает инициализирующую процедуру библиотеки, чтобы включить ее в интерпретатор. Аргумент fileName есть имя файла, содержащего код. Конкретная форма кода различна на разных платформах, но чаще всего он должен быть разделяемой библиотекой, такой как.so-файлы для Solaris и.dll-файлы для Windows. Аргумент packageName есть имя библиотеки. Оно используется для определения имени инициализационной процедуры. Аргумент interp содержит имя интерпретатора (см. описание команды interp). Если аргумент interp не указан явно, то по умолчанию библиотека загружается в текущий интерпретатор.

    Как только файл загружен в адресное пространство приложения, вызывается одна из двух процедур инициализации нового кода. Обычно процедура инициализации добавляет в интерпретатор новые Tcl-команды. Имя процедуры определяется исходя из имени библиотеки и из того, является интерпретатор, в который будут добавляться команды, безопасным (см. команду interp). Для обычного интерпретатора имя процедуры pkg_Init, где pkg ≈ имя библиотеки, преобразованное следующим образом: Первая буква переведена в верхний регистр, а все остальные ≈ в нижний. Например, если имя библиотеки Foo, то имя инициализационной процедуры должно быть Foo_Init.

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

    Процедура инициализации должна соответствовать следующему прототипу:

    typedef int Tcl_PackageInitProc(Tcl_Interp *interp);

    Аргумент interp определяет интерпретатор, в который библиотека будет загружена. Процедура инициализации должна вернуть код TCL_OK или TCL_ERROR чтобы указать, была ли она завершена успешно. В случае ошибки она должна присвоить переменной interp->result значение указателя на сообщение об ошибке. Результат процедуры инициализации будет возвращен командой load как ее результат.

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

    Команда load также поддерживает библиотеки, статически связанные с приложением, если они зарегистрированы с использованием процедуры Tcl_StaticPackage. Если аргумент fileName есть пустая строка, то необходимо указывать имя библиотеки.

    Если аргумент packageName отсутствует или равен пустой строке, Tcl пытается сам сформировать имя библиотеки. На разных платформах это выполняется по-разному. На Unix-платформах обычно для этого берется последний элемент имени файла. Если первые три буквы в нем ≈ lib, то они отбрасываются. После чего берутся все последовательные символы, которые являются буквами или символом подчеркивания. Например, если имя файла libxyz4.2.so, то в качестве имени библиотеки будет сформировано xyz, а при исполнении команды

    load bin/last.so {}
    сформируется имя библиотеки last.
    Если аргумент fileName равен пустой строке, то должен быть задан аргумент packageName. Команда load в таком случае ищет сначала статически загружаемую библиотеку (то есть, библиотеку, зарегистрированную с помощью процедуры Tcl_StaticPackage) с указанным именем. Если такая будет найдена, то она используется в команде. В противном случае ищется динамически загружаемая процедура с этим именем. Если загружено несколько версий одной и той же библиотеки, то Tcl выбирает ту, которая была загружена первой.
    ОШИБКИ Если одна и та же библиотека загружается несколько раз из различных файлов, на некоторых платформах она будет загружена в адресное пространство несколько раз.

    lrange
    Команда возвращает один или несколько последовательных элементов списка. СИНТАКСИС lrange list first last ОПИСАНИЕ Команда возвращает новый список ≈ подмножество Tcl-списка list, начиная с элемента first и заканчивая элементом last включительно. Для обозначения последнего элемента списка list в аргументе first или last можно использовать значение end. Если аргумент first меньше нуля, он считается равным нулю. Если аргумент last больше или равен числу элементов в списке, он считается равным end. Если аргумент first больше, чем last, то команда возвращает пустой список.

    Команда

    lrange list first first не всегда возвращает тот же результат, что и lindexlist first (хотя это обычно так при простых элементах списка, которые не заключены в фигурные скобки). Но она всегда возвращает тот же результат, что и команда list [lindex list first]
    lreplace


    Команда замещает элементы списка новыми элементами. СИНТАКСИС lreplace list first last?element element ┘? ОПИСАНИЕ Команда lreplace возвращает новый список, образованный из списка list путем замены его элементов, начиная с first до last, на аргументы element. Если аргумент first меньше нуля, он считается равным нулю. Если аргумент last больше или равен числу элементов в списке, он считается равным end. Если last меньше, чем first, тогда не будет удалено ни одного прежнего элемента, и новые элементы будут просто вставлены перед first. Для аргументов first и last можно использовать значение end для ссылки на последний элемент списка.

    Каждый аргумент element становится отдельным элементом списка. Если не было задано ни одного аргумента element, тогда прежние элементы списка с first по last будут просто удалены.
     
     

    lsearch

    Команда проверяет наличие заданного элемента в списке. СИНТАКСИС lsearch?mode? list pattern ОПИСАНИЕ Данная команда просматривает по очереди элементы спискаlist с целью найти первый из них, совпадающий с заданным образцом pattern. Команда возвращает индекс первого найденного такого элемента или ▒-1▓, если такой элемент не найден. Аргумент mode указывает конкретный способ сравнения элементов списка и образца. Возможные значения аргумента:

    -exact

    Означает, что элемент списка должен быть в точности равен образцу -glob Означает, что используются такие же правила сравнения, как в команде string match. -regexp Означает, что образец считается регулярным выражением, и для сравнения используются те же правила, что и в команде regexp.
    Значение по умолчанию -glob.

       
    lsort




    Команда сортирует элементы списка.

    СИНТАКСИС lsort ?options? list ОПИСАНИЕ Данная команда сортирует элементы списка list и возвращает новый список с уже упорядоченными элементами. По умолчанию используется упорядочивание в порядке возрастания символов в таблице ASCII. Кроме того, для управления процессом сортировки в команде можно указать произвольные из перечисленных ниже опций (допускаются уникальные сокращения).

    -ascii

    Упорядочивание в порядке возрастания символов в таблице ASCII. Значение по умолчанию. -dictionary

    Словарный режим. Тоже, что и -ascii, но со следующими отличиями:

  • регистр не учитывается;
  • если две строки содержат цифры, то числа сравниваются как целые, а не как символы ASCII.
  • Например, bigBoy окажется между bigbang и bigboy, а x10y между x9y и x11y.

    -integer

    Режим целых чисел, когда все элементы списка конвертируются в целые числа и при сравнении трактуются именно как целые числа. -real Режим чисел с плавающей запятой; этот режим аналогичен предыдущему и используется для действительных чисел. -command command Режим сортировки при помощи произвольной команды пользователя. Для сравнения двух элементов списка выполняется скрипт, состоящий из command и дополненный соответствующими элементами списка. Скрипт должен вернуть целое число, большее нуля, равное нулю, или меньшее нуля в зависимости от того, считается ли первый элемент больше второго, равен ему или меньше его. -increasing Сортировка в порядке возрастания (от меньших к большим). Это значение по умолчанию. -decreasing

    Сортировка в порядке убывания (от больших к меньшим).

    -index index

    Эта опция может использоваться, если каждый из элементов списка сам есть список (то есть list есть список списков). Опция позволяет отсортировать список по ⌠одной из колонок■, то есть по элементам подсписков с фиксированным индексом index. Значение аргумента index, равное end, означает генерацию по последнему элементу подсписков. Например, команда

    lsort -integer -index 1 {{First 24} {Second 18} {Third 30}}
    вернет {Second 18} {First 24} {Third 30}.


    Эта опция значительно более эффективна для данной задачи, чем опция -command с соответствующей процедурой сравнения.
     
     
     
     
     
     

    namespace


    Команда предназначена для создания и управления областями имен для команд и переменных. СИНТАКСИС namespace ?option??arg ┘? ОПИСАНИЕ Команда позволяет создавать, обращаться и уничтожать отдельные области имен для команд и переменных. Более детально назначение и использование команды описаны ниже см. ⌠Пространства имен■. Действия, выполняемые командой, зависят от значения аргументаoption. Ниже приведены возможные опции команды.

    namespace children?namespace??pattern?

    Позволяет получить список областей-потомков для области имен namespace. Если аргумент namespace отсутствует, то возвращается список областей-потомков для текущего пространства имен. Команда возвращает полные имена, начинающиеся с ::. Если указан аргумент pattern, команда возвращает только те имена, которые удовлетворяют шаблону pattern. Проверка на соответствие производится по тем же правилам, что и в команде glob. При этом шаблон, начинающийся с ::, используется непосредственно, в противном случае используемый шаблон составляется из namespace (или полного имени текущего пространства имен) и pattern. namespace code script Позволяет захватить контекст текущей области имен для скрипта script с тем, чтобы потом использовать этот контекст при выполнении данного скрипта. Команда возвращает новый скрипт, в котором старый скрипт ⌠завернут■ в команду namespace code. Новый скрипт имеет две важные особенности: во-первых, он может быть вызван в произвольном пространстве имен, при этом реально он будет выполняться в текущем пространстве имен (том, в котором выполнялась команда namespace code). Во-вторых, к созданному таким образом скрипту можно дописывать произвольные аргументы и они действительно будут использоваться как дополнительные аргументы. Например, предположим, что команда

    set script [namespace code {foo bar}]

    выполняется в пространстве имен ::a::b. Тогда команда

    eval ⌠$script x y■

    может быть выполнена в любом пространстве имен и будет иметь тот же эффект, что и команда

    namespace eval ::a::b {foo bar x y}.

    Эта команда необходима потому, что расширения Tcl, например, Tk, обычно выполняют вызванные по событиям скрипты в глобальном пространстве имен. Обертывающая команда захватывает необходимую команду вместе с ее пространством имен и позволяет корректно выполнить ее позже по соответствующему вызову. Примеры использования данного механизма приведены ниже см. ⌠Правила видимости имен■.

    namespace current Позволяет получить полное имя текущей области имен. Хотя реальное имя глобального пространства имен ⌠■ (пустая строка), эта команда возвращает для него ::, поскольку это часто бывает удобнее при программировании. namespace delete?namespace namespace...? Позволяет удалить одну или несколько областей имен, при этом удаляются все переменные, процедуры и области-потомки заданной области имен. Если внутри одного из удаляемых пространств имен выполняется какая-либо процедура, оно будет сохранено до завершения процедуры, но помечено, как приготовленное к удалению, чтобы исключить вызов других процедур. Если указанное пространство имен не существует, команда возвращает ошибку. Если ни одно пространство имен не указано, команда не делает ничего. namespace eval namespace arg?arg...? Позволяет активизировать пространство имен namespace и выполнить в его контексте заданный код. Если пространство имен namespace не существует, оно будет создано. Если пространство имен должно быть предком несуществующего пространства имен, то оно тоже создается. Если задано более одного аргумента, все они объединяются в одну строку через пробел (как при выполнении команды eval) и полученный скрипт выполняется. namespace export?-clear? ?pattern pattern...? Позволяет указать, какие команды разрешено экспортировать из данного пространства имен. Эти команды потом могут быть импортированы в другие пространства имен с помощью команды namespace import. Можно разрешать экспорт как команд, созданных в данном пространстве имен, так и команд, ранее импортированных из других пространств. Команда, разрешаемая для экспорта, может в данный момент не существовать. Каждый из шаблонов pattern может содержать специальные символы как в команде glob, но не может содержать имени пространства имен. То есть шаблон может указывать команды только в текущем пространстве имен. Каждый из шаблонов добавляется к списку шаблонов команд, разрешенных для импорта из данного пространства имен. Если в команде указан флаг -clear, команда предварительно удаляет старый список. Если не указаны ни флаг, ни шаблоны, команда возвращает текущий список шаблонов. namespace forget?pattern pattern...? Удаляет из пространства имен ранее импортированные команды. Каждый образец pattern должен быть полным именем команды с указанием хотя бы одного пространства имен и может содержать специальные символы, как в команде glob, например: foo::x или a::b::p*. Специальные символы нельзя использовать в именах пространств имен. При выполнении данной команды сначала ищутся команды, удовлетворяющие шаблону и разрешенные к экспорту из соответствующих пространств имен. Далее проверяется, какие из них были импортированы в текущее пространство имен. После чего импортированные команды удаляются. То есть команда выполняет действия, противоположные действиям команды namespace import. namespace import?-force??pattern pattern...? Импортирует команды в текущее пространство имен. Каждый образец pattern должен быть полным именем команды с указанием хотя бы одного пространства имен и может содержать специальные символы, как в команде glob, например foo::x или a::b::p*. Специальные символы нельзя использовать в именах пространств имен. Все команды, которые удовлетворяют шаблонам и разрешены для экспорта, добавляются к текущему пространству имен. Для этого в текущем пространстве имен создается новая команда, которая указывает на экспортируемую команду в исходном пространстве имен. При вызове этой новой команды она вызывает исходную команду. Если в текущем пространстве имен уже есть команда с таким именем, возвращается ошибка, если не указана опция -force. В противном случае импортируемая команда заменяет команду, определенную ранее. Команда namespace import импортирует в текущее пространство имен только те функции, которые в момент исполнения существуют в соответствующем пространстве имен. Если позже там будут созданы новые команды с именами, удовлетворяющими шаблонам, разрешающим экспорт, и шаблонам, определяющим импорт, то они не импортируются автоматически. namespace inscope namespace arg?arg...? Выполняет скрипт в контексте пространства имен namespace. Эта команда не предназначена для непосредственного исполнения программистом. Ее вызовы создаются автоматически при использовании команды namespace code для создания скриптов, выполняемых в фоновом режиме, например, для Tk-виджетов. Команда namespace inscope похожа на команду namespace eval, но отличается от нее наличием возможности указывать дополнительные аргументы и тем, что пространство имен namespace должно существовать в момент выполнения команды. При выполнении команды первый аргумент рассматривается как список, к которому остальные аргументы добавляются как элементы списка. Так команда
      namespace inscope ::foo a x y z

    эквивалентна

    namespace eval ::foo [concat a [list x y z]]
     

    Такая семантика весьма удобна при формировании скриптов, выполняемых в фоновом режиме.


    namespace origincommand

    Возвращает полное имя оригинальной команды command, от которой происходит заданная импортированная команда. При импорте команды в текущем пространстве имен создается новая команда, которая указывает на экспортируемую команду в исходном пространстве имен. Если команда последовательно импортировать в пространства имен a, b,...,n, причем в каждое последующее пространство имен она импортировалась из предыдущего, то namespace origin вернет полное имя команды в первом пространстве имен, то есть a. Если команда command не импортирована, то namespace origin вернет ее полное имя. namespace parent?namespace? Возвращает полное имя родительского пространства имен для пространства namespace. Если аргумент namespace не указан, возвращает полное имя предка текущего пространства имен. namespace qualifiers string Возвращает полное имя пространства имен для string, то есть часть строки string от начала до последнего символа ▒::▓ (но не включая его). Например, для строки ▒::foo::bar::x▓ эта команда вернет ▒::foo::bar▓, а для ▒::▓ ≈ ⌠■ (пустую строку). Команда является парной для команды namespace tail. При выполнении команды проверка существования соответствующих пространств имен не производится. namespace tail string Возвращает простое имя, завершающее полное имя string, то есть часть строки string от последнего символа ▒::▓ (но не включая его) до конца строки. Например, для строки ▒::foo::bar::x▓ эта команда вернет ▒x▓, а для ▒::▓ ≈ ⌠■ (пустую строку). Команда является парной для команды namespace qualifiers. При выполнении команды проверка существования соответствующих пространств имен не производится. namespace which?-command??-variable? name Рассматривает name как имя команды или переменной (в зависимости от указанной опции; по умолчанию ≈ как имя команды) и возвращает ее полное имя. Например, если name не существует в текущем пространстве имен, но существует в глобальном, то возвращает полное имя в глобальном пространстве имен. Если команда или переменная не существует, данная команда возвращает пустую строку. Более подробно правила поиска имен см. ⌠Правила видимости имен■.
    ЧТО ТАКОЕ ПРОСТРАНСТВО ИМЕН?  
    Пространство имен ≈ это обособленный набор команд и переменных. Содержащиеся в нем команды и переменные не взаимодействуют с командами и переменными в других пространствах имен. В Tcl всегда был один такой набор, который мы будем называть глобальным пространством имен. В нем содержатся все глобальные переменные и команды. Команда namespace eval позволяет создавать другие пространства имен, например, команда namespace eval Counter { namespace export Bump
    variable num 0
    proc Bump {} { variable num
    incr num
    }


    }

    создает новое пространство имен, содержащее переменную num и процедуру Bump. Команды и переменные в этом пространстве имен изолированы от других команд и имен в той же программе. Например, в глобальном пространстве имен может существовать другая команда Bump.

    Переменные пространства имен напоминают глобальные переменные. Они существуют вне процедур, но могут использоваться в процедурах с помощью команды variable, как показано в предыдущем примере.

    Пространства имен ≈ динамические образования. В них можно в любой момент добавлять команды и переменные с помощью дополнительных команд namespace eval. Например, то же пространство имен, что и в предыдущем примере, можно было создать с помощью последовательности команд:

    namespace eval Counter { variable num 0
    proc Bump {} { variable num
    return [incr num]
    }
    }
    namespace eval Counter { proc test {args} { return $args } } namespace eval Counter { rename test ⌠■
    }
    Обратите внимание, что процедура test создана в пространстве имен Counter, а затем удалена с помощью команды rename.

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

    ПОЛНЫЕ ИМЕНА  
    Каждое пространство имен имеет собственное имя, например history или ::safe::interp. Полные имена используются для указания команд, переменных или подпространств имен, содержащихся в соответствующем пространстве имен. Полные имена напоминают полные имена файлов в Unix или виджетов в Tk, но в качестве разделителей в них используется не слеш или точка, а двойное двоеточие ⌠::■. Самое верхнее или глобальное пространство имен имеет имя ⌠" (пустая строка) и ▒::▓ как синоним. Как пример, имя ::safe::interp::create ссылается на команду create в пространстве имен interp, которое является подпространством пространства имен ::safe, которое в свою очередь является подпространством глобального пространства имен ::.

    Если вы хотите указать команду или переменную в другом пространстве имен, вы можете указать имя пространства имен, в котором она содержится. Например, из глобального пространства имен вызвать процедуру из пространства имен Counter можно следующим образом:

    Counter::Bump 5

    Counter::Reset

    А вывести текущее значение переменной count можно с помощью команды puts ⌠count = $Counter::num■ Если одно пространство имен содержит другое, может понадобиться более длинное имя. Если пространство имен Foo содержит пространство имен Counter, то чтобы вызвать процедуру Bump в последнем из глобального пространства имен, нужно воспользоваться именем Foo::Counter::Bump 3 Полное имя может использоваться при создании или переименовании команд. Например, можно добавить процедуру в пространство имен Foo следующей командой: proc Foo::Test {args} {return $args} А переопределить ее в другом пространстве имен командой: rename Foo::Test Bar::Test Дополнительные замечания. Имена пространств имен, за исключением глобального, не могут быть пустой строкой. Сочетание :: запрещено в именах простых команд, переменных и пространств имен кроме как в роли разделителя имен пространств имен. Дополнительные символы : в полных именах игнорируются, то есть два или больше символов : подряд считаются одним разделителем. Сочетание :: в конце имени команды или переменной указывает на команду или переменную с именем {} (пустая строка). Однако в полном имени пространства имен :: на конце игнорируется.
    ПРАВИЛА ВИДИМОСТИ ИМЕН  

    Все Tcl-команды, которые работают с именами переменных и команд, поддерживают полные имена. Это значит, что можно использовать полные имена в таких командах, как set, proc, rename, или interp alias. Если вы используете абсолютное имя, начинающееся с ::, то такое имя всегда интерпретируется однозначно. Однако, если вы используете относительное имя, не начинающееся с ::, поиск объекта с соответствующим именем происходит по следующим правилам: команды и переменные сначала ищутся в текущем пространстве имен, а затем (если не найдены) ≈ в глобальном. Имена пространств имен ищутся только в текущем пространстве имен.

    В следующем примере

    set traceLevel 0
    namespace eval Debug { printTrace $traceLevel }
    Tcl ищет переменную traceLevel в пространстве имен Debug и затем в глобальном пространстве имен. Аналогично ищется и процедура printTrace. Чтобы не оставлять неясностей, рассмотрим еще один пример: set traceLevel 0
    namespace eval Foo { variable traceLevel 3
    namespace eval Debug { printTrace $traceLevel }
    }
    Здесь Tcl ищет переменную traceLevel в пространстве имен Foo::Debug. Поскольку там ее нет, он продолжает поиск в глобальном пространстве имен. Переменная Foo::traceLevel в процессе поиска полностью игнорируется.

    Чтобы разобраться в сложных ситуациях, можно использовать команду namespace which. Например, следующая команда:
     

    namespace eval Foo::Debug {namespace which -variable traceLevel} вернет ::traceLevel. С другой стороны, команда:
      namespace eval Foo {namespace which -variable traceLevel} вернет ::Foo::traceLevel.

    Как уже упоминалось, относительные имена пространств имен ищутся иначе, чем имена команд и переменных. Они ищутся только в текущем пространстве имен. Это значит, что, например, команда namespace eval всегда создает потомка текущего пространства имен, если только имя нового пространства не начинается с ::.

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

    Переменные, определенные в данном пространстве имен, можно использовать в процедурах в этом же пространстве имен с помощью команды variable. Похожая на команду global, эта команда создает связь между локальной переменной в процедуре и одноименной переменной в пространстве имен. Если необходимо, эта команда также создает и инициализирует эту переменную (команда global только создает связь с переменной в глобальном пространстве имен). Команду variable можно не использовать, если вы всегда используете полное имя переменной.
     
     

    ИМПОРТ КОМАНД  

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

    Blt::graph.g -background red

    Blt::table..g 0,0

    Если Вы используете команды graph и table регулярно, предпочтительнее использовать их без префикса Blt::. Для этого достаточно импортировать эти команды в текущее пространство имен, например, следующим образом: namespace import Blt::* В результате выполнения этой команды все команды из пространства имен Blt будут экспортированы в текущее пространство имен, и вы сможете использовать их без соответствующего префикса: graph.g -background red

    table..g 0,0

    Команда namespace import импортирует только те команды, экспорт которых разрешен с помощью команды namespace export.

    Как правило, не стоит импортировать все команды из пространства имен, так как при этом может быть сложно отследить все команды, которые вы получите. Лучше указать явно, какие именно команды вам нужны. Например, команда

    namespace import Blt::graph Blt::table импортирует только команды graph и table.

    Если вы попытаетесь импортировать команду, которая уже существует в текущем пространстве имен, то вы получите ошибку. Это предупредит, например, попытки скопировать одну и ту же команду из двух разных библиотек. Однако время от времени (например, при отладке) у вас может появиться желание преодолеть данное ограничение. Для этого нужно указать в команде опцию -force, и тогда существующая команда будет заменена на импортируемую команду без сообщения об ошибке:

    namespace import -force Blt::graph Blt::table Если вам почему-либо надо прекратить использование библиотечной команды, это можно сделать следующим образом: namespace forget Blt::* Эта команда ищет в текущем пространстве имен все команды, импортированные из Blt, и удаляет их. Если таких команд не оказалось, команда ничего не делает. После исполнения команды namespace forget Blt::* команды из пространства имен Blt можно использовать только с префиксом Blt::.

    Если вы удаляете команду из того пространства имен, где она была создана, например:

    rename Blt::graph ⌠■ то она будет удалена из всех пространств имен, в которые она была импортирована.
    ЭКСПОРТ КОМАНД  
    Вы можете разрешить экспорт команд из определенного пространства имен: namespace eval Counter { namespace export Bump Reset
    variable num 0
    variable max 100
    proc Bump {{by 1}} { variable num
    incr num $by
    check
    return $num
    }
    proc Reset {} { variable num
    set num 0
    }
    proc check {} { variable num
    variable max
    if {$num > $max} { error ⌠too high!■
    }
    }
    }
    После этого процедуры Bump и Reset можно импортировать, например, с помощью команды: namespace import Counter::* Но экспорт процедуры check не разрешен, и она не будет импортирована этой командой.

    Команда namespace import позволяет импортировать только те команды, которые разрешено экспортировать из их пространства имен с помощью команды namespace export. Если в команде namespace import указана команда, которую нельзя экспортировать, она не будет импортирована в соответствующее пространство имен.
     
     


    open

    Открывает канал для связи с файлом или программой.
    СИНТАКСИС open fileName

    open fileName access

    open fileName access permissions
     

    ОПИСАНИЕ Эта команда открывает файл, последовательный порт или командный конвейер и возвращает идентификатор канала, который может использоваться в дальнейшем в таких командах, как read, puts и close. Если первый символ атрибута fileName не равен ⌠|■, то команда отрывает файл fileName, соответственно значение аргумента fileName должно соответствовать обычным соглашениям, описанным в п. filename .

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

     
    r Открывает файл только на чтение. Это значение по умолчанию.
    r+ Открывает файл на чтение и запись. Файл должен существовать.
    w Открывает файл только на запись. Удаляет содержимое файла, если он существовал. Если нет, то создает новый файл.
    w+ Открывает файл на чтение и запись. Удаляет содержимое файла, если он существовал. Если нет, то создает новый файл.
    a Открывает файл на чтение. Файл должен существовать. Новые данные записываются в конец файла.
    a+ Открывает файл на чтение и запись. Если файл не существует, создает новый файл. Новые данные записываются в конец файла.


    Во второй нотации аргумент access может содержать набор из флагов, описанных ниже. Среди флагов обязательно должен быть один из следующих: RDONLY, WRONLY или RDWR.
     

     
    RDONLY  Открывает файл только на чтение.
    WRONLY Открывает файл только на запись
    RDWR Открывает файл на чтение и запись.
    APPEND Переставляет указатель в конец файла перед каждой записью.
    CREAT Создает файл, если он не существует. Без этого флага попытка открыть несуществующий флаг приведет к ошибке.
    EXCL Если указан также флаг CREAT, то будет сгенерирована ошибка, если файл уже существует.
    NOCTTY Если файл открыт для терминального устройства, этот флаг не позволяет ему стать управляющим терминалом процесса.
    NONBLOCK Позволяет в неблокирующем режиме открыть файл и, возможно, выполнять в этом режиме последующие операции ввода ≈ вывода. Последствия использования этого флага зависят от платформы и устройства. Предпочтительнее вместо него использовать команду fconfigure. Конкретные особенности использования флага описаны в руководстве по вашей операционной системе, системный вызов open, флаг O_NONBLOCK.
    TRUNC Если файл существует, то его содержимое удаляется.


    Если файл создается при выполнении команды open, то аргумент permissions (целое число) используется для установки прав доступа к вновь созданному файлу. Значение по умолчанию 0666.

    КОМАНДНЫЙ КОНВЕЙЕР  
    Если первый символ вfileName ⌠|'', то считается, что остальные символы описывают командный конвейер, который запускается так же, как командой exec. В этом случае идентификатор открытого канала может использоваться для ввода информации в стандартный ввод запущенного конвейера или для чтения его стандартного вывода. в зависимости от значения аргумента access. Если канал открыть только на запись, то стандартный вывод конвейера направляется на текущий стандартный вывод (если он не перенаправлен в конвейере). Если канал открыт только на чтение, стандартный ввод для конвейера берется из текущего стандартного ввода (если он не перенаправлен в конвейере).
    ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ   Если аргумент fileName указывает на параллельный порт, то соответствующий порт открывается и инициализируется (реальные действия в зависимости от платформы). Допустимые значения fileName для различных платформ см. ⌠Особенности реализации на различных платформах■. КОНФИГУРИРОВАНИЕ   Команда fconfigure может быть использована для определения и изменения текущей конфигурации канала. Для последовательного порта можно использовать следующие опции.

    -mode baud,parity,data,stop

    Эта опция включает 4 величины, записанные через запятую.

    baud ≈ число, скорость передачи данных в Бодах (бит в секунду);

    parity ≈ четность, может принимать одно из значений n (none), o (odd), e (even), m (mark), s (space);

    data ≈ число бит данных (целое от 5 до 8);

    stop ≈ число стоп битов (целое 1 или 2).

     
    ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА РАЗЛИЧНЫХ ПЛАТФОРМАХ   Windows (все версии)

    Аргумент fileName для сериальных портов должен иметь форму comX, где X ≈ число (обычно, от 1 до 4). Попытка открыть несуществующий порт приводит к ошибке.

    Windows NT

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

    Windows 95

    Сложности при работе с 16-битовыми DOS-приложениями.

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

    Windows 3.X

    Те же проблемы, что и при выполнении команды exec.

    Macintosh

    Открытие последовательного порта не поддерживается.

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

    Unix

    Обычно для открытия последовательного порта используется значение fileName /dev/ttyX, где X равно a или b, но можно также использовать любой псевдофайл, назначенный на соответствующий порт.

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

     

    package
    Команда загрузки пакетов библиотек и контроля версий.

    СИНТАКСИС
     

    package forget  package

    package ifneeded package version?script?

    package names

    package provide package?version?

    package require? -exact? package?version?

    package unknown? command?

    package vcompare version1 version2

    package versions package

    package vsatisfies version1 version2


    ОПИСАНИЕ

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

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

    package forget package
    Удаляет информацию о пакете из интерпретатора, включая как информацию, возвращаемую командой package ifneeded, так и информацию, возвращаемую командой package provide. package ifneeded package version?script? Команда используется в системных скриптах. Если указана конкретная версия и скрипт, заносит в базу данных информацию о том, что соответствующая версия пакета доступна и может быть загружена в интерпретатор с помощью скрипта script. Если в базе данных уже хранится информация о скрипте, она обновляется. Если скрипт не указан, возвращается текущий скрипт. package names Возвращает список всех пакетов в интерпретаторе, для которых известна доступная версия (заданная с помощью команды package provide) или скрипт загрузки (заданный командой package ifneeded). package provide package?version? Команда используется для того, чтобы указать, что версия version пакета package загружена в интерпретатор. Если ранее была загружена другая версия, возвращает ошибку. Если версия не указана, возвращает загруженную версию. package require?-exact? package?version? Команда используется, если для выполнения дальнейшего кода необходим библиотечный пакет package версии version. Команда возвращает номер загруженной версии или ошибку. Если присутствуют оба аргумента -exact и version, то команда загружает именно указанную версию (или выдает ошибку, если эта версия недоступна). Если присутствует номер версии, а -exact опущено, то команда загружает указанную версию или более позднюю, но с тем же старшим номером версии (2.7, но не 3.1, когда указана версия 2.5).

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

    package unknown ?command? Команда ⌠последней надежды■ при поиске необходимой версии пакета. Если аргумент command указан, то он дополняется именем пакета и версии и полученный скрипт выполняется. Если версия не указана, подставляется пустая строка.

    Если аргумент command не указан, возвращает текущий скрипт, заданный для команды package unknown.
     

    package vcompare version1 version2 Команда сравнения версий. Возвращает ▒-1▓, если version1 более ранняя версия, чем version2, ▒1▓ ≈ в противном случае, и ▒0▓, если они равны. package versionspackage
      Возвращает список всех доступных версий пакета (информация о которых занесена в базу данных с помощью команды package ifneeded). package vsatisfiesversion1 version2 возвращает ▒1▓, если у version1 и version2 совпадают старшие номера, а младший номер у version1 не меньше, чем у version2, и ▒0▓ ≈ в противном случае.
    ИНДЕКСЫ ПАКЕТОВ 
     
    Рекомендованный способ работы с пакетами в Tcl состоит в том, чтобы включать в скрипты команды package require и package provide, и использовать процедуру pkg_mkIndex (см. соответствующие пункты) для создания индексных файлов для пакетов. Это обеспечивает автоматическую загрузку необходимых пакетов.


    См.также close(n), filename(n), gets(n), read(n), puts(n), exec(n)
     
     
     

     

    pid


    Команда сообщает идентификаторы процессов.
    СИНТАКСИС pid ?fileId? ОПИСАНИЕ Если задан аргумент fileId, то он должен указывать на конвейер процессов (process pipeline), открытый командой open. В этом случае команда представит список идентификаторов всех процессов в конвейере, по порядку. Если fileId указывает на открытый файл, не являющийся конвейером процессов, то список будет пустой. Если аргумент fileId не задан, то будет возвращен идентификатор текущего процесса. Все идентификаторы представлены десятичными строками.
       
     
     

    pkg_mkIndex


    Создает индексный файл для автоматической загрузки пакета.
    СИНТАКСИС  
    pkg_mkIndex dir pattern?pattern pattern...?
    ОПИСАНИЕ  
    Процедура pkg_mkIndex представляет собой утилиту для работы с Tcl-библиотеками. Она обеспечивает создание индексных файлов, необходимых для автоматической загрузки пакетов, когда в приложении встречается команда package require. Для создания автоматически загружаемых пакетов необходимо выполнить следующие действия:

    Создать один или несколько пакетов. Каждый пакет может состоять из одного или больше файлов с Tcl-скриптами или из бинарных файлов. Бинарные файлы должны быть пригодны для их загрузки с помощью команды load с единственным аргументом -именем файла. Например, если в пакет входит файл test.so, он должен загружаться командой load test.so. Каждый файл Tcl-скриптов должен содержать команду package provide с именем пакета и версией. Каждый бинарный файл должен содержать вызов процедуры Tcl_PkgProvide.

    Создать индексные файлы с помощью команды pkg_mkIndex. Аргумент dir указывает имя каталога, в котором лежат файлы пакета, а шаблоны pattern, которые могут содержать специальные символы, как в команде glob, указывают на файлы в этом каталоге. Команда pkg_mkIndex создаст в каталоге dir файл pkgIndex.tcl, содержащий информацию обо всех файлах пакета, заданных с помощью аргументов pattern. Для этого загружаются все файлы пакета, и определяется, какие новые пакеты и какие новые процедуры появились (поэтому в каждом файле пакета и должна быть команда package provide или вызов Tcl_PkgProvide).

    Установить пакет как подкаталог одного из каталогов, перечисленных в переменной tcl_pkgPath. Если в списке $tcl_pkgPath больше одного каталога, то бинарные файлы с разделяемыми библиотеками обычно устанавливаются в первом каталоге, а библиотеки Tcl-скриптов ≈ во втором. В этих каталогах должны также находиться файлы pkgIndex.tcl. Пока пакеты будут размещаться в подкаталогах каталогов, перечисленных в переменной tcl_pkgPath, этого будет достаточно для их автоматической загрузки при выполнении команды package require.

    Если вы установили пакеты в каких-либо других каталогах, то необходимо, чтобы эти каталоги содержались в переменной auto_path или были бы непосредственными подкаталогами одного из содержащихся там каталогов. Переменная auto_path содержит список каталогов, которые просматриваются как автозагрузчиком, так и загрузчиком пакетов. По умолчанию он включает $tcl_pkgPath. Загрузчик пакетов также просматривает и подкаталоги каталогов, включенных в auto_path. Пользователь может в явном виде включить в приложении необходимые каталоги в auto_path. А можно включить эти каталоги в переменную окружения TCLLIBPATH. Если она существует, то используется для инициализации переменной auto_path при запуске приложения.

    Если перечисленные выше шаги выполнены, то для использования необходимого пакета достаточно выполнить в приложении команду package require. Если, например, версии 2.1, 2.3 и 3.1 пакета Test проиндексированы и хранятся в соответствующих каталогах, то команда

    package require Test загрузит версию 3.1. А команда package require -exact Test 2.1 загрузит версию 2.1. В различных каталогах могут храниться много версий одного и того же пакета, но в данный интерпретатор может быть загружена только одна из них ≈ та, которая будет затребована первой. Однако, в различных интерпретаторах одного приложения могут быть загружены различные версии одного и того же пакета.
    ЗАГРУЗЧИК ПАКЕТОВ И АВТОЗАГРУЗЧИК  
    Автозагрузчик и загрузчик пакетов во многом имеют сходные возможности, поскольку и тот, и другой предназначены для загрузки файлов по требованию. Однако загрузчик файлов представляет собой механизм более высокого уровня, который использует автозагрузчик на последнем шаге процесса загрузки. Как правило, предпочтительнее индексировать пакеты с помощью команды pkg_mkIndex, чем с помощью команды auto_mkindex, поскольку это обеспечивает подключение механизма версий. Вы можете иметь несколько версий одного и того же пакета и, более того, использовать в различных приложениях различные версии. Напротив, auto_mkindex позволяет работать с единственной версией пакета. Скорее всего, не стоит создавать индексы для пакета с помощью и pkg_mkIndex, и auto_mkindex, поскольку в этом случае трудно контролировать, какой из механизмов загрузки пакета сработает первым, и, соответственно, какая версия пакета будет загружена.
    КАК ЖЕ ЭТО РАБОТАЕТ?  
    При первом вызове команды package require исполняется скрипт package unknown. При инициализации Tcl-скрипт package unknown задается таким образом, что он выполняет все файлы pkgIndex.tcl в каталогах auto_path. Эти файлы содержат команды package ifneeded для каждой доступной версии каждого доступного пакета. Эти команды в свою очередь вызывают команды package provide, которые объявляют данные версии доступными. Кроме того, они формируют необходимую исходную информацию для автозагрузчика. Данный файл данной версии данного пакета реально загружается только тогда, когда вызывается первая из содержащихся в нем команд. Таким образом, после выполнения команды package require вы не увидите команд пакета в интерпретаторе, но, тем не менее, вы сможете их вызвать и при этом они загрузятся автоматически.
     
     


    proc

    Создает Tcl-процедуры.
    СИНТАКСИС proc name args body ОПИСАНИЕ  
    Команда proc создает новую Tcl-процедуру с именем name, если такой процедуры ранее не было, и замещает ранее существовавшую процедуру или команду с таким именем, если она была. При вызове новой процедуры скрипт body передается на выполнение Tcl-интерпретатору. Обычно имя процедуры указывается без указания имени пространства имен. При этом новая процедура создается в текущем пространстве имен. Однако, если пространство имен указано явно, она создается в указанном пространстве. Аргумент args определяет формальные аргументы процедуры и представляет собой список (возможно, пустой), каждый элемент которого представляет описание одного формального параметра. Каждое такое описание само является списком из одного или двух элементов. Первый элемент списка определяет имя формального параметра. Второй элемент списка, если он указан, определяет значение по умолчанию для данного параметра.

    При выполнении процедуры для каждого формального параметра создается локальная переменная. Ей присваивается значение соответствующего аргумента, указанного при вызове процедуры, или значение по умолчанию. Аргумент, для которого при определении процедуры указано значение по умолчанию, может не присутствовать в вызове процедуры. Однако общее количество указанных параметров должно быть достаточным для аргументов, не имеющих значения по умолчанию, но не больше общего числа формальных параметров. Если это условие выполнено, все аргументы процедуры собираются в один список (как при исполнении команды list). Эта комбинированная величина присваивается локальной переменной args.

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

    Команда proc возвращает пустую строку. При вызове процедуры возвращается величина, заданная в команде return. Если в процедуре не выполнялась явная команда return, она возвращает результат выполнения последней команды, выполнявшейся в теле процедуры. Если при выполнении процедуры произошла ошибка, то процедура в целом возвращает эту ошибку.
     

     
    puts




    Команда записывает данные в канал.
     

    СИНТАКСИС
      puts?-nonewline??channelId? string ОПИСАНИЕ
      Записывает символы из аргументаstring в канал channelId. Значение channelId должно быть идентификатором канала, который вернула предыдущая команда open или socket. Соответствующий канал должен быть открыт на запись. Если аргумент channelId не указан, значение по умолчанию соответствует стандартному выводу. Команда puts обычно выдает после string символ новой строки, однако, если указана опция -nonewline, этого не происходит.

    Символы новой строки при выводе заменяются на последовательность, используемую на данной платформе (например, cr lf на Windows-платформах) в соответствии со значением опции канала -translation. Опция может быть изменена с помощью команды fconfigure.

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

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

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


    pwd

    Команда pwd возвращает путь к текущему каталогу.
    СИНТАКСИС pwd ОПИСАНИЕ
      Команда pwd возвращает полный путь к текущему каталогу.
       

    read


    Команда выполняет чтение данных из канала. СИНТАКСИС
      read ?-nonewline? channelId

    read channelIdnumBytes
     

    ОПИСАНИЕ
      Команда read зачитывает из канала channelId либо весь файл до символа конца файла (при первой форме записи), либо заданное параметром numBytes количество байтов (вторая форма). Если во втором случае в файле оказалось меньше байтов, чем задано numBytes, тогда возвращаются все байты, что остались.

    Если указана опция -nonewline, при выполнении команды отбрасывается символ новой строки в конце файла.

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

    Команда read изменяет во входных данных последовательность, задающую конец строки, в соответствии с опцией канала -translation option.Опция может быть изменена с помощью команды fconfigure.
     
     
     
     
     
     
     

    regexp


    Сравнивает строку и регулярное выражение.
    СИНТАКСИС   regexp?switches? exp string?matchVar??subMatchVar subMatchVar...? ОПИСАНИЕ Команда определяет, соответствует ли регулярное выражениеexp какой-либо части строки string или всей строке, и возвращает ▒1▓, если соответствует, и ▒0▓ ≈ в противном случае.

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

    Если первые аргументы команды начинаются с ⌠-■, они считаются опциями команды. Ниже перечислены возможные опции.

    -nocase

    При сравнении не различает буквы в верхнем и нижнем регистре. -indices В переменных subMatchVars сохраняются не части строки, а списки из двух десятичных чисел ≈ индексов начала и конца соответствующей области строки. -- Означает конец опций. следующий аргумент будет рассматриваться как exp, даже если он начинается с ⌠-■. Если в команде указано больше переменных subMatchVar, чем выражений в скобках в exp, или если для одного из выражений не удалось найти соответствующую ему часть строки, то соответствующей переменной будет присвоено значение ⌠-1 -1■ или пустая строка, в зависимости от того, была ли задана опция -indices.
    РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ  
    Регулярное выражение состоит из ни одной или более ветвей (branch), разделенных символом '|'. Строка соответствует выражению, если она соответствует одной из его ветвей.

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

    Часть состоит из атома со следующим за ним необязательным символом '*', '+' или '?'. Атом с последующим символом ▒*▓ соответствует любой последовательности из нуля или более подстрок, каждая из которых соответствует атому. Атом с символом '+' после него соответствует любой последовательности из одной или более подстрок, каждая из которых соответствует атому. Атом с символом '?' после него соответствует подстроке, которая соответствует атому, или пустой строке.

    Атом может быть регулярным выражением в скобках (в этом случае он соответствует любой строке, которая соответствует этому регулярному выражению), интервалом (см. ниже), символом '.' (соответствует ровно одному произвольному символу), '^' (соответствует нулевой строке в начале string), '$' (соответствует нулевой строке в конце string), '\' с последующим одним символом (соответствует этому символу), или одним символом без какого-либо иного смысла (соответствует этому символу).

    Интервал есть последовательность символов, заключенная в квадратные скобки. Он обычно соответствует любому символу из этого интервала. Если последовательность начинается с символа '^', то она соответствует любому символу, кроме символов, стоящих далее в последовательности. Если два символа в последовательности разделены символом '-', то это краткая форма для обозначения всех ASCII символов между этими двумя (например, '[0-9]' соответствует любой десятичной цифре). Для того, чтобы включить в последовательность символ ']', следует поставить его на место первого в последовательности (следом за возможным символом '^'). Для включения в последовательность символа '-' следует сделать его первым или последним символом.
     
     

    ВЫБОР ИЗ АЛЬТЕРНАТИВНЫХ СОСТОЯНИЙ  
    Вообще говоря, регулярное выражение может соответствовать строке несколькими различными способами. Например, рассмотрим выражение regexp (a*)b* aabaaabb x y В соответствии с описанными выше правилами переменные x и y могут принять значение aabb и aa, aaab и aaa, ab и a или одну из еще нескольких возможных комбинаций. Чтобы избежать этой потенциальной неопределенности команда regexp выбирает между возможными вариантами по правилу ⌠первый и самый длинный■. Другими словами, строка и регулярное выражение просматриваются слева направо, при этом выбирается часть строки максимально возможной длины. Говоря точнее, при выборе используются следующие правила в порядке убывания приоритета.

    [1]

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

    Если обе начинаются в одном и том же месте, то это неопределенный (тяжелый) случай. Его можно объяснить следующим образом.

    [2]

    Если регулярное выражение содержит символы ▒|▓ (то есть состоит из нескольких ветвей), то будет выбрана самая левая ветвь, которой что-либо соответствует

    [3]

    Для выражений, содержащих '*', '+' и '?▓, выбираются самые длинные фрагменты строки, соответствующие им.

    [4]

    Компоненты выражений рассматриваются слева направо.

    В приведенном выше примере ▒(a*)b*▓ соответствует ▒aab▓, так как для ▒(a*)▓ выбирается первый соответствующий ему фрагмент, то есть начальные ▒aa▓, а затем для ▒b*▓ выбирается следующий символ ▒b▓. Рассмотрим еще один пример:

    regexp (ab|a)(b*)c abc x y z После выполнения команды переменная x будет содержать значение ▒abc▓, переменная y ≈ ▒ab▓ и переменная z будет содержать пустую строку. Правило [4] определяет, что поиск начнется с выражения (ab|a), а правило [2], что поиск начнется с подвыражения ▒ab▓. Поэтому символ ▒b▓ в строке будет использован, и выражение ▒(b*)▓ будет соответствовать пустой строке.
    regsub
    Команда выполняет подстановки, используя регулярные выражения. СИНТАКСИС  
    regsub? switches? exp string subSpec varName
    ОПИСАНИЕ  
    Команда сравнивает регулярное выражение exp и строку string и копирует string в переменную, заданную именем varName. Если совпадение найдено, то при копировании часть строки string, соответствующая exp, замещается на subSpec. Если subSpec содержит один из символов ▒&▓ or ▒\0▓, то он заменяется на часть строки string, которая соответствует шаблону exp. Если subSpec содержит ▒\n▓, где n √ целое число от ▒1▓ до ▒9▓, то это выражение заменяется на часть строки string, которая соответствует n-ому заключенному в скобки выражению в exp. Чтобы избежать специальной интерпретации перечисленных символов и символа ⌠обратный слеш■, их необходимо экранировать символом ⌠обратный слеш■. Чтобы избежать возможных проблем с интерпретацией символов ⌠обратный слеш■ в exp, проще всего заключить exp в фигурные скобки.

    Если начальные аргументы команды начинаются с символа ▒-▓, они считаются опциями команды. Ниже приведен список поддерживаемых опций.

    -all

    Ищутся все подобласти string, соответствующие exp, и для каждой из них производится замена. Символы ▒&▓ и ▒\n▓ замещаются на очередной фрагмент string, соответствующий exp. То есть каждый раз они могут замещаться на различные выражения. -nocase

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

    --

    Означает конец опций. Следующий аргумент будет рассматриваться как exp, даже если он начинается с ▒-▓.

    Команда возвращает количество найденных (и, соответственно, замещенных) интервалов. Правила соответствия строк регулярным выражениям приведены в описании команды regexp.
     
     


    rename
    Команда rename переименовывает или удаляет команду. СИНТАКСИС  
    rename oldName newName
    ОПИСАНИЕ  
    Данная команда переименовывает команду по имени oldName в newName. Если newName отсутствует (равно пустой строке), тогда команда oldName удаляется.

    Имена oldName и newName могут содержать квалификаторы областей имен (указатели на имена областей имен). Если команда переименовывается в другую область имен, то последующие вызовы этой команды будут происходить в новой области имен. Команда rename возвращает пустую строку.
     
     
     
     
     


    resource
    Управляет Macintosh-ресурсами СИНТАКСИС resource option?arg arg...? ОПИСАНИЕ Команда resource позволяет управлять ресурсами на платформах Macintosh. На остальных платформах не поддерживается.

    return
    Команда осуществляет возврат из процедуры. СИНТАКСИС return ?-code code?? -errorinfo info?? -errorcode code??string? ОПИСАНИЕ Команда немедленно осуществляет возврат из текущей процедуры (или команды верхнего уровня, или команды source) со значением, заданным string. Если аргумент string не задан, возвращает пустую строку.

    Обычно опция -code не используется, и процедура завершается успешно (с кодом завершения TCL_OK). Однако, ее можно использовать для генерации других кодов возврата. Ниже перечислены возможные коды.

    ok
     

    Успешное завершение. То же самое, что отсутствие кода.


    error

    Возвращает ошибку. То же самое, что использовать команду error  для прекращения выполнения процедуры за исключением обработки переменных errorInfo и errorCode (см. ниже). return Текущая процедура вернет код TCL_RETURN, который вызовет немедленный возврат также и из вызывающей процедуры. break Текущая процедура вернет код TCL_BREAK, который вызовет немедленное прекращение выполнения самого внутреннего из вложенных циклов, из которого была вызвана процедура. continue Текущая процедура вернет код TCL_CONTINUE, который вызовет немедленное прекращение выполнения текущей итерации самого внутреннего из вложенных циклов, из которого была вызвана процедура. value Значение value должно быть целым числом. Оно будет возвращено как код выполнения процедуры. Опция -code используется относительно редко. Она предусмотрена для того, чтобы процедуры, реализующие новые управляющие команды, могли вернуть вызывающим их процедурам исключительные условия.

    Опции -errorinfo и -errorcode могут использоваться совместно с √code error, чтобы вернуть дополнительную информацию о сгенерированной ошибке. В остальных случаях они игнорируются.

    Опция -errorinfo используется для того, чтобы задать исходное значение переменной errorInfo. Если она не будет задана, то в переменную errorInfo будет включена информация о вызове процедуры, вернувшей ошибку, и о более высоких уровнях стека, но не информация непосредственно об ошибке внутри процедуры. Чаще всего для формирования переменной info используется сообщение команды catch, обнаружившей ошибку в процедуре.

    Если опция -errorcode указана, она позволяет задать значение переменной errorCode. В противном случае ей будет присвоено значение NONE.
     
     


    scan
    Производит разбор строки в стиле процедуры sscanf СИНТАКСИС scan string format varName?varName...? ВВЕДЕНИЕ Данная команда, подобно ANSI C процедуре sscanf, просматривает строку string, выбирает поля и преобразует их в соответствии с очередным спецификатором преобразования в строке format. Выбранные значения преобразуются обратно в строковый вид и последовательно записываются в переменные varName. ПРОЦЕСС СКАНИРОВАНИЯ Команда scan просматривает одновременно строки string и format. Если очередной символ в строке format ≈ пробел или табуляция, то он соответствует любому числу (включая ноль) пробельных символов (пробел, табуляция, новая строка) в строке string. Если в строке format встретился символ ▒%▓, он означает начало очередного спецификатора преобразования. Спецификатор преобразования включает в себя до трех полей после символа ▒%▓: первое поле может содержать символ ▒*▓, означающий, что преобразуемая величина будет удалена, а не записана в очередную переменную, второе поле может содержать число, указывающее максимальную ширину поля, и третье поле содержит букву, определяющую тип преобразования. Обязательным является только третье поле.

    Когда команда scan находит спецификатор преобразования в строке format, она пропускает пробельные символы в строке string. Затем она выбирает следующую группу непробельных символов и преобразует их в соответствии со спецификатором преобразования и записывает результат в переменную, соответствующую следующему аргументу команды. Поддерживаются следующие типы преобразований, задаваемые соответствующими символами:

    d

    Входное поле должно быть десятичным числом. Результат записывается как десятичная строка. o Входное поле должно быть восьмеричным числом. Результат преобразуется в десятичную строку. x Входное поле должно быть шестнадцатеричным числом. Результат преобразуется в десятичную строку. c Читается один символ, его двоичная величина преобразуется и записывается в переменную как десятичная строка. Начальные пробельные символы в этом случае не пропускаются. В отличие от ANSI C процедуры sscanf входное поле всегда состоит ровно из одного символа, а ширина поля не может быть задана. s

    Входное поле состоит из всех непробельных символов до следующего пробельного. Все символы копируются в переменную.

    e или f или g

    Входное поле должно быть числом с плавающей точкой, состоящим из знака (не обязательно), строки десятичных цифр, возможно с десятичной точкой и порядка (не обязательно), состоящего из буквы e или E, знака порядка (не обязательно) и строки десятичных цифр. [chars] Входное поле состоит из произвольного числа символов из chars. Соответствующая строка записывается в переменную. Если первый символ в скобках ▒]▓, то он рассматривается как часть chars, а не как закрывающая скобка для множества символов [^chars] Входное поле состоит из произвольного числа символов, не содержащихся в chars. Соответствующая строка записывается в переменную. Если первый символ в скобках после ▒^▓ есть ▒]▓, то он рассматривается как часть chars, а не как закрывающая скобка для множества символов. Число символов, которое выбирается для преобразования, это максимально возможное число символов для соответствующего преобразования (например, так много десятичных цифр, как это возможно для %d, или так много восьмеричных цифр, как это возможно для %o). Поле, выбираемое для очередного преобразования, закрывается, как только в строке string встречается пробельный символ или как только поле достигает указанного максимального размера (в зависимости от того, что происходит раньше). Если в спецификаторе преобразования для очередного поля присутствует символ ▒*▓, то выбранное значение не присваивает никакой переменной, а очередной аргумент команды scan по-прежнему считается неиспользованным.
    ОТЛИЧИЯ  ОТ ANSI SSCANF  
    Поведение команды scan не отличается от поведения ANSI C процедуры sscanf за исключением следующих моментов:

    [1]

    Спецификаторы %p и %n не поддерживаются.

    [2]

    Для спецификатора %c нельзя указывать ширину поля. Только один символ переводится в десятичную величину, которая и присваивается соответствующей переменной.

    [3]

    Модификаторы l, h и L игнорируются. Целые числа преобразуются так, как будто никакого модификатора не было задано, а действительные числа ≈ как при модификаторе l, то есть с использованием типа double для внутреннего представления.
     
     
     
     
     
     
     


    seek
    Команда изменяет позицию доступа открытого канала. СИНТАКСИС seek channelIdoffset ?origin? ОПИСАНИЕ  
    Команда изменяет текущую позицию доступа канала, заданного параметром channelId. Значение channelIdдолжно быть идентификатором канала, который вернула предыдущая команда open или socket. Аргументы origin и offset задают новую позицию, в которой будет выполняться следующая операция чтения или записи. Аргумент offset должен быть целым числом (возможно, отрицательным), а аргумент origin может принимать одно из перечисленных ниже значений.

    start

    Следующая позиция будет на расстоянии offset байтов от начала соответствующего файла или устройства. current Следующая позиция будет на расстоянии offset байтов от текущей позиции. Отрицательное значение offset передвигает позицию назад. end Следующая позиция будет на расстоянии offset байтов от конца файла или устройства. Отрицательное значение offset указывает на позицию до конца файла, а положительное √ на позицию после конца файла. Значение по умолчанию для аргумента origin равно start.

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


    set
    Команда читает и записывает значения переменных. СИНТАКСИС set varName?value? ОПИСАНИЕ Команда set возвращает значение переменной varName. Если задан параметр value, то команда присваивает переменной varName значение value и возвращает значение value. Если такой переменной не существовало, тогда она создается вновь.

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

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

    Если команда используется вне тела процедуры, то varName есть имя глобальной переменной (если текущее пространство имен есть глобальное пространство) или переменной текущего пространства имен. В теле процедуры varName есть имя параметра или локальной переменной процедуры, если она не объявлена глобальной переменной или переменной пространства имен с помощью команды global или variable соответственно.
     
     



    socket

    Команда открывает сетевое TCP-соединение.
     
  • Синтаксис 
  • Описание
  • Клиентское соединение 
  • Серверное соединение 
  • Конфигурационные опции 

  •  
    СИНТАКСИС  
    socket?options? host port

    socket -server command?options? port
     

    ОПИСАНИЕ  
    Эта команда открывает сетевое соединение и возвращает идентификатор канала, который может использоваться в последующих командах read, puts или flush. В настоящее время поддерживается только протокол TCP. Команда может использоваться для открытия соединения как со стороны сервера, так и со стороны клиента.
    КЛИЕНТСКОЕ СОЕДИНЕНИЕ  
    Если опция -server не указана, то канал открывается со стороны клиента, и возвращаемый идентификатор канала может быть использован для операции чтения и записи. Аргументы portи host задают порт для соединения. По данному порту должен быть сервер, обслуживающий соединение. Аргумент port должен быть целым числом, а host ≈ адресом машины в доменном стиле (например, www.sunlabs.com) или числовым IP-адресом (например, 127.0.0.1.). Для ссылки на локальную машину, на которой выполняется команда, можно использовать значение localhost.

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

    -myaddr addr

    Аргумент addr задает доменный или числовой адрес сетевого интерфейса клиентской стороны для упрощения соединения. Эта опция может быть полезна, если на клиентской машине есть несколько сетевых интерфейсов. Если опция не указана, системный интерфейс будет выбран операционной системой.

    -myport port

    Аргумент port задает номер порта для клиентсткой стороны соединения. Если опция не указана, номер порта для клиента будет определен операционной системой.

    -async

    Использование опции -async приведет к тому, что клиент будет подсоединен в асинхронном режиме. Это значит, что сокет будет создан немедленно, возможно, еще до установления связи с сервером. Если канал открыт в блокирующем режиме, то при выполнении команды gets или flush по такому сокету, команда завершится только после того, как процесс установления соединения будет завершен. Если канал открыт в неблокирующем режиме, то в этой ситуации команда завершится немедленно, а команда fblocked для данного канала возвратит 1.
     

    СЕРВЕРНОЕ СОЕДИНЕНИЕ  
    Если в команде присутствует опция -server, то новый сокет будет сервером для порта port. Tcl будет автоматически устанавливать соединения по данному порту. Для каждого соединения будет создаваться новый канал, который может быть использован для связи с клиентом. При этом Tcl выполняет команду command с тремя дополнительными аргументами: имя нового канала, адрес клиентской машины в сетевой нотации и номер порта клиента.

    В команде можно использовать следующие опции:

    -myaddr addr

    Аргумент addr задает доменный или числовой адрес сетевого интерфейса серверной стороны для упрощения соединения. Эта опция может быть полезна, если на серверной машине есть несколько сетевых интерфейсов. Если опция не указана, сокет связывается со специальным адресом INADDR_ANY, который позволяет принимать соединения от любого интерфейса.

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

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

    КОНФИГУРАЦИОННЫЕ ОПЦИИ  
    Команда fconfigure может получить значения нескольких неизменяемых опций для сокетов:

    -sockname

    Эта опция возвращает список из трех элементов: адреса, имени хоста и номера порта для сокета. Если имя хоста не может быть определено, второй элемент списка совпадает с первым ≈ адресом. -peername Эта опция не поддерживается для сокетов сервера. Для сокетов клиента и установленных соединений она выдает список из трех элементов: адреса, имени хоста и номера порта для сокета. Если имя хоста не может быть определено, второй элемент списка совпадает с первым ≈ адресом.  
     
     
       

    source
    Команда source исполняет скрипт, содержащийся в файле. СИНТАКСИС source fileName ОПИСАНИЕ Данная команда передает интерпретатору Tcl содержимое названного файла в качестве исполняемого скрипта. Команда возвращает результат выполнения последней выполненной команды скрипта. Если при выполнении скрипта возникла ошибка, то команда source возвратит эту ошибку. Если при выполнении скрипта была вызвана команда return, то выполнение скрипта прекращается, и команда завершается. При этом она возвращает результат выполнения команды return.

    Для Macintosh-платформ существуют дополнительные варианты команды, предназначенные для работы с ресурсами.
     
     
     


    split
    Команда разделяет строку на части и создает из них правильный Tcl-список. СИНТАКСИС split string?splitChars? ОПИСАНИЕ Команда делит строку string в каждом месте, где есть символ, содержащийся в splitChars. Каждый элемент списка образован частью исходной строки, заключенной между двумя последовательными вхождениями символов из splitChars в строку. В списке формируется пустой элемент, если два символа из splitChars встречаются подряд или если первый или последний символ string содержится в splitChars. Если splitChars есть пустая строка, то строка разбивается на отдельные символы. По умолчанию splitChars содержит пробельные символы (пробел, табуляция, новая строка).

    Примеры.

    Команда

    split ⌠comp.unix.misc■. вернет ⌠comp unix misc■, а команда split ⌠Hello world■ {} вернет ⌠H e l l o { } w o r l d■.
    string
    Команда для работы со строками. СИНТАКСИС string option arg?arg...? ОПИСАНИЕ Выполняет одну из перечисленных ниже строковых операций в зависимости от заданной опции option.

    string compare string1 string2

    Выполняет посимвольное сравнение строк string1 и string2 так же, как С-процедура strcmp. Возвращает -1, 0 или 1, в зависимости от того, будет ли строка string1 больше, равна или меньше (при лексикографическом сравнении) строки string2. string first string1 string2 Ищет в строке string2 последовательность символов, в точности совпадающую со string1. Если такая последовательность есть, возвращает индекс первой буквы в первой найденной последовательности. В противном случае возвращает -▓1▓. string index string charIndex Возвращает charIndex-ный символ в строке string. Значение charIndex, равное ▒0▓, соответствует первому символу в строке. Если значение charIndex меньше ▒0▓ или не меньше длины строки ≈ возвращает пустую строку. string last string1 string2 Ищет в строке string2 последовательность символов, в точности совпадающую со string1. Если такая последовательность есть, возвращает индекс первой буквы в последней найденной последовательности. В противном случае возвращает ▒-1▓. string length string Возвращает десятичную строку, содержащую число символов в строке. string match pattern string

    Проверяет, соответствует ли строка образцу. Возвращает ▒1▓, если соответствует, и ▒0▓ ≈ в противном случае. Соответствие проверяется примерно так же, как в C-shell. Строка соответствует шаблону, если они совпадают посимвольно, за исключением перечисленных ниже специальных случаев:

    * ≈ Удовлетворяет любой последовательности из нуля или больше символов;

    ? √ Удовлетворяет любому символу;

    [chars] √ Удовлетворяет любому символу из chars. Если chars включает последовательность символов типа a-b, то удовлетворяет всем символам от a до b (включительно).

    \x √ Удовлетворяет символу x. Обеспечивает возможность избежать в шаблонах специального смысла символов ▒*▓, ▓?▓, ▒[▒, ▒]▓, ▒\▓.

    string range string first last

    Возвращает подстроку строки string, начиная с символа с индексом first и кончая символом с индексом last. Индекс ▒0▓ указывает на первый символ строки. Индекс end (или любое его сокращение) указывает на последний символ строки. Если значение first меньше ▒0▓, используется значение ▒0▓. Если last больше значения индекса последнего символа в строке, используется значение end. Если first больше, чем last, команда возвращает пустую строку. string tolower string Возвращает строку, тождественную string, за исключением того, что все символы верхнего регистра в ней переведены в нижний регистр. string toupperstring Возвращает строку, тождественную string, за исключением того, что все символы нижнего регистра в ней переведены в верхний регистр. string trim string?chars? Возвращает строку, тождественную string, за исключением того, что из нее удалены все начальные и конечные символы, входящие в chars. Если аргумент chars не указан, удаляются пробельные символы (пробелы, табуляция, символы новой строки). string trimleft string?chars? Возвращает строку, тождественную string, за исключением того, что из нее удалены все начальные символы, входящие в chars. Если аргумент chars не указан, удаляются пробельные символы (пробелы, табуляция, символы новой строки). string trimright string?chars? Возвращает строку, тождественнуюstring, за исключением того, что из нее удалены все конечные символы, входящие в chars. Если аргумент chars не указан, удаляются пробельные символы (пробелы, табуляция, символы новой строки). string wordend string index Возвращает индекс символа, идущего сразу после последнего символа в слове, содержащем index-ный символ строки string. Словом считается любая непрерывная последовательность из букв, цифр и символа подчеркивания, или любой другой одиночный символ. string wordstart string index Возвращает индекс первого символа в слове, содержащем index-ный символ строки string. Словом считается любая непрерывная последовательность из букв, цифр и символа подчеркивания, или любой другой одиночный символ.

    subst
    Команда выполняет подстановки переменных, команд и подстановки с обратным слешем. СИНТАКСИС  
    subst ?-nobackslashes ? ?-nocommands? ?-novariables? string
    ОПИСАНИЕ  
    Команда subst выполняет подстановки переменных, подстановки команд и подстановки с обратным слешем в строке string и возвращает получившуюся строку. Все подстановки выполняются обычным для Tcl образом. В результате подстановки в строке string выполняются дважды: один раз ≈ анализатором команд Tcl и второй раз ≈ командой subst.

    Если задан любой из ключей -nobackslashes, -nocommands или -novariables, то соответствующие подстановки не выполняются.

    Внимание! При выполнении подстановок команда subst не обращает внимания на двойные кавычки и фигурные скобки. Например, следующий скрипт

    set a 44

    subst {xyz {$a}}

    вернет ⌠xyz {44}■, а не ⌠xyz {$a}■.

    switch
    Команда выполняет один из нескольких скриптов в зависимости от полученного значения. СИНТАКСИС switch?options? string pattern body?pattern body...?

    switch?options? string {pattern body?pattern body...?}

    ОПИСАНИЕ Команда switch сравнивает аргумент string по очереди с каждым из образцов, заданных аргументами pattern. Если строка string соответствует очередному образцу, выполняется соответствующий скрипт body и команда возвращает результат его выполнения. Если последний из образцов равен default, то ему соответствует любая строка. Если строка не соответствует ни одному из образцов (что значит, в частности, что образец default отсутствует), то никакой скрипт не выполняется и команда возвращает пустое значение.

    Если один или несколько первых аргументов команды начинаются с ⌠-■, они считаются опциями команды. Возможные опции перечислены ниже.

    -exact
     

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


    -glob
     

    При сравнении строки с образцом используются те же правила, что и в команде string match.


    -regexp
     

    При сравнении строки с образцом используются те же правила, что и в команде regexp.


    -
     

    Обозначает конец опций. Следующий аргумент считается строкой string, даже если он начинается с символа ⌠-■.


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

    Если один из аргументов body равен ▒-▓, это означает, что при совпадении строки с данным образцом будет выполняться скрипт body для следующего образца. Если для следующего образца скрипт также равен ▒-▓, то будет использован скрипт для следующего за ним образца и т.д.

    Ниже приведены примеры использования команды switch.

    Команда

    switch abc a ≈ b {format 1} abc {format 2} default {format 3} вернет значение ▒2▓.

    Команда

    switch -regexp aaab { ^a.*b$ -
    b {format 1}
    a* {format 2}
    default {format 3}
    }
    вернет значение ▒1▓.

    А команда

    switch xyz { a
    -
    b
    {format 1}
    a*
    {format 2}
    default
    {format 3}
    }
    вернет значение ▒3▓.
     
     

    tclvars
    Переменные, используемые Tcl. ОПИСАНИЕ  
    Следующие глобальные переменные автоматически создаются при запуске программ. Как правило, они ведутся автоматически и в пользовательском приложении их значения не изменяются.

    env

    Эта переменная представляет собой массив, элементы которого соответствуют переменным окружения. Присвоение значения элементу массива приводит к изменению значения (или созданию) соответствующей переменной окружения. Удаление элемента массива с помощью команды unset  удаляет соответствующую переменную окружения. Модифицированное состояние массива используется для процессов ≈ потомков, запущенных командой exec. На Windows-платформах переменные PATH, COMSPEC и WINDIR всегда пишутся в верхнем регистре. Все остальные переменные оставляются в том виде, в каком они заданы в операционной системе.

    На Macintosh-платформах, на которых нет переменных окружения, автоматически формируемый массив env, тем не менее, содержит следующие элементы:

    LOGIN, USER, SYS_FOLDER, APPLE_M_FOLDER, CP_FOLDER, DESK_FOLDER, EXT_FOLDER, PREF_FOLDER, PRINT_MON_FOLDER, SHARED_TRASH_FOLDER, TRASH_FOLDER, START_UP_FOLDER, PWD errorCode При возникновении ошибки эта переменная содержит дополнительную информацию об ошибке в форме, удобной для автоматической обработки. Эта информация содержится в виде списка из одного или более элементов. Первый элемент списка содержит имя класса ошибки. Его значение определяет формат остальной части списка. Стандартно используются следующие классы ошибок (в приложении могут определяться и дополнительные классы):
    ARITH code msg Этот класс ошибки формируется при арифметической ошибке (например, при попытке делить на ноль в команде expr). Код code определяет конкретный тип ошибки, а msg содержит текст с описанием ошибки. Возможные значения кода DIVZERO (попытка делить на нуль), DOMAIN (аргумент не принадлежит области определения функции, например acos(2)), IOVERFLOW (переполнение при целочисленных операциях), OVERFLOW (переполнение при вычислениях с плавающей запятой) или UNKNOWN (если не удается определить тип ошибки). CHILDKILLED pid sigName msg Этот класс ошибки используется, если выполнение процесса ≈ потомка прервано сигналом. Второй элемент списка (pid) содержит в этом случае идентификатор прерванного процесса. Элемент sigName содержит символьное имя сигнала, например SIGPIPE, а в элементе msg содержит текст с описанием сигнала, например ``write on pipe with no readers''. CHILDSTATUS pid code Этот класс ошибки используется, когда процесс ≈ потомок завершается с кодом ошибки. Второй элемент списка (pid) содержит в этом случае идентификатор прерванного процесса а третий элемент (code) ≈ значение кода ошибки. CHILDSUSP pid sigName msg Этот класс ошибки используется, когда выполнение процесса-потомка приостановлено из-за сигнала. Элементы списка имеют тот же смысл, что и для CHILDKILLED. NONE Этот класс используется для тех ошибок, для которых дополнительная информация не может быть получена, поскольку при попытке ее выдать произошла ошибка. POSIX errName msg Этот класс используется для тех ошибок, которые происходят при выполнении вызовов POSIX. Второй элемент списка содержит символическое имя ошибки, например, ENOENT, а в элементе msg содержит текст с описанием ошибки, например, ``no such file or directory''.
    errorInfo При возникновении ошибки эта переменная содержит описание команды или процедуры, в которой произошла последняя ошибка. Описание построено в виде описания стека, указывающего вложенные Tcl-команды, выполнявшиеся при возникновении ошибки. tcl_library В этой переменной хранится имя каталога, содержащего системную библиотеку Tcl-скриптов, используемых, в частности, при автозагрузке. Величина этой переменной возвращается командой info library. Начальное значение переменной формируется в результате просмотра ряда каталогов и поиска в них соответствующих скриптов. Если задана переменная окружения TCL_LIBRARY, указанный в ней каталог проверяется первым. Если переменная TCL_LIBRARY не задана или в ней не содержатся необходимые файлы, то просматриваются еще несколько каталогов, зависящих от расположения каталогов Tcl и текущего каталога. tcl_patchLevel В этой переменной хранится информация о текущей версии Tcl, например 7.3p2 для второй доработки версии 7.3. или 7.4b4 для четвертого бета релиза версии 7.4. Значение переменной возвращается командой info patchlevel. tcl_pkgPath Переменная содержит список каталогов, используемых для размещения пакетов библиотек. Обычно список состоит из двух элементов ≈ каталога для бинарных файлов и каталога для скриптов. Пакеты обычно устанавливаются как подкаталоги этих каталогов. Исходное значение переменной добавляется к списку каталогов в auto_path и используются для поиска пакетов при выполнении команды package require. Последующие изменения в tcl_pkgPath не отражаются в переменной auto_path. Поэтому дополнительные каталоги для поиска пакетов необходимо указывать (если это нужно) непосредственно в переменной auto_path. tcl_platform Эта переменная является ассоциативным массивом, в элементах которого содержится информация о платформе. Ниже содержится список элементов массива (расширения и приложения могут хранить информацию о себе в дополнительных элементах этого массива). byteOrder Исходный порядок байтов в слове: littleEndian или bigEndian machine Набор команд, исполняемых на машине, например intel, PPC, 68k или sun4m. На Unix ≈ платформах совпадает с величиной, возвращаемой командой uname -m. os Имя операционной системы, например Win32s, Windows NT, MacOS или SunOS. На Unix ≈ платформах совпадает с величиной, возвращаемой командой uname -s. osVersion Версия операционной системы. На Unix ≈ платформах совпадает с величиной, возвращаемой командой uname -r. platform
      Может принимать одно из значений windows, macintosh или unix.


    tcl_precision

    Переменная управляет числом цифр при переводе десятичных чисел в строки. Значение по умолчанию 12. Максимальное значение 17 позволяет переводить числа из двоичного представления в строковое и обратно без потери точности. Однако при этом отключается округление. В результате команда expr 1.4 вернет значение ▒1.3999999999999999▓, если tcl_precision равна ▒17▓, и значение. ▒1.4▓ если tcl_precision равна ▒12▓.


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

    tcl_rcFileName

    Эта переменная используется при инициализации для определения имени пользовательского фала, исполняемого при запуске. Для wish обычно ее значение ~/.wishrc для Unix платформ и ~/wishrc.tcl для Windows платформ. Если соответствующий файл найден, он читается командой source. tcl_rcRsrcName Используется только на Macintosh платформах для задания TEXT ресурса. tcl_traceCompile Эта переменная позволяет управлять объемом информации, формирующейся при компиляции Tcl в байт-код. По умолчанию значение переменной равно ▒0▓ и никакая информация не выводится. Если присвоить tcl_traceCompile значение ▒1▓, то при компиляции каждой процедуры или команды верхнего уровня на стандартный выход посылается одна строка комментариев. Если присвоить tcl_traceCompile значение ▒2▓, то при компиляции в стандартный вывод выдается подробный листинг. Это бывает полезно при проблемах, возникающих в процессе компиляции, особенно, при переводе старых программ на Tcl8.0. tcl_traceExec Эта переменная позволяет управлять объемом информации, выводящейся при исполнении байт-кода. По умолчанию tcl_traceExec равна ▒0▓ и никакая информация не выводится. Если присвоить tcl_traceExec значение ▒1▓, то при исполнении процедур в стандартный вывод выдается одна строка текста. Если присвоить tcl_traceExec значение ▒1▓, то строка текста выдается также при выполнении каждой команды, а если присвоить tcl_traceExec значение ▒3▓, то выдается информация о выполнении каждой инструкции байт-кода. Это бывает полезно при проблемах, возникающих в процессе компиляции и исполнения, особенно, при переводе старых программ на Tcl8.0. tcl_version Эта переменная содержит номер версии Tcl в форме x.y. Обычно изменение x может означать потерю совместимости с предыдущими версиями, тогда как изменение y означает небольшие улучшения и исправление ошибок. Значение переменной возвращается командой info tclversion.  

    tell
    Команда возвращает текущую позицию поиска открытого канала. СИНТАКСИС  
    tell channelId
    ОПИСАНИЕ  
    Команда tell возвращает десятичную строку, указывающую текущую позицию доступа в канале channelId. Если канал не поддерживает прямой доступ, то возвращается значение ▒-1▓.
    time
    Команда выполняет скрипт заданное количество раз. СИНТАКСИС  
    time script?count?
    ОПИСАНИЕ  
    Команда time вызовет интерпретатор Tcl count раз для выполнения скрипта script или только один раз, если аргумент count не задан. Команда возвратит строку вида 503 microseconds per iteration отображающую среднее время в микросекундах, израсходованное на одну итерацию. В строке указывается прошедшее время, а не время работы процессора.

    trace
    Команда отслеживает работу с переменными. СИНТАКСИС  
    trace option?arg arg...?
    ОПИСАНИЕ  
    Эта команда вызывает выполнение указанных Tcl команда при определенных действиях с переменной. Ниже перечислены возможные опции команды (допускаются сокращения).

    trace variable name ops command

    Обеспечивает выполнение команды command при определенных действиях с переменной name. Ниже перечислены возможные значения аргумента ops и какие действия с переменной при этом отслеживаются. Аргумент name может содержать имя простой переменной, имя элемента массива или имя массива. Если name содержит имя массива, то команда command выполняется при соответствующих действиях с любым элементом массива. Аргумент ops состоит из одной или больше букв, перечисленных ниже.

    r

    Вызывает команду command при чтении переменной. w Вызывает команду command при присвоении значения переменной. u Вызывает команду command при удалении переменной. Переменная может удаляться как явно (с помощью команды unset), так и неявно (при завершении процедуры). переменная также удаляется при удалении интерпретатора, в котором она была создана. Однако, при этом соответствующая команда не вызывается, так как уже нет интерпретатора, в котором ее можно было бы выполнить. Когда срабатывает команда trace, то исполняемая команда command дополняется тремя аргументами, как указано ниже

    command name1 name2 op
     

    Здесь name1 это имя переменной, действия с которой вызвали срабатывание команды. Если это элемент массива, то name1 это имя массива, а name2 ≈ имя конкретного элемента массива. В противном случае name2 ≈ пустая строка. Если в команде trace было указано имя массива и он удаляется, то name2 также будет пустой строкой. Имена в переменных name1 и name2 не обязано совпадать с теми, что были заданы в команде trace variable, поскольку команда upvar позволяет процедуре обращаться к переменной по различным именам. Аргумент op указывает какое именно действие выполнялось с переменной и может принимать значения r, w или u как указано выше.


    Команда command исполняется в том же контексте, что и код, вызвавший срабатывание trace. То есть если действие с переменной выполнялось в процедуре, то команда command может обращаться к локальным переменным этой процедуры. Этот контекст может отличаться от контекста, в котором выполнялась сама команда trace. Если команда conmmand есть вызов процедуры (как обычно и бывает), то в процедуре необходимо использовать команду upvar или uplevel чтобы получить доступ к контролируемой переменной. Как уже говорилось, имена в переменных name1 и name2не обязано совпадать с теми, что были заданы в команде trace variable, поскольку команда upvar позволяет процедуре обращаться к переменной по различным именам.

    Если команда trace контролирует чтение и запись в переменную, команда command может изменить результат отслеживаемой операции. Если команда command изменяет значение отслеживаемой переменной, то новое значение будет возвращено как результат отслеживаемой операции. Величина, возвращаемая командой command, игнорируется, если только это не ошибка. Тогда отслеживаемая операция также возвращает ошибку с тем же самым сообщением об ошибке, которое было сформировано в команде command, не поясняя, что ошибка произошла в результате отслеживания переменной. Это может приводить к определенным трудностям в определении истиной операции, при выполнении которой возникла ошибка.

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

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

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

    Если одна и та же переменная отслеживается с помощью нескольких команда trace, то выполняться все соответствующие команды command с учетом порядка выполнения соответствующих команд trace. Чем позднее она выполнялась, тем раньше будет выполнена соответствующая команда command. Если одна из команд command при этом возвратит ошибку, остальные команды выполняться не будут. Если одна команда используется для отслеживания элемента массива, а другая ≈ для массива в целом, первой выполняется команда отслеживания массива в целом, а затем уже команда отслеживания элемента.

    Однажды выполненная команда trace остается активной пока она не удалена с помощью описанной ниже команды trace vdelete, пока не удалена переменная или пока не удален интерпретатор. Удаление элемента массива приведет к прекращению отслеживания этого элемента, но не отслеживания массива в целом.

    Команда trace variable возвращает пустую строку.

    trace vdelete name ops command

    Если задано отслеживание переменной name с перечнем действий ops и командой command, то оно будет удалено. Соответственно команда command никогда не будет вызвана. Команда trace vdelete возвращает пустую строку. trace vinfo name Возвращает список, содержащий по одному элементу для каждого заданного отслеживания для переменной name. Каждый элемент списка содержит два элемента, содержащие значения ops и command из команды trace, которой было задано соответствующее отслеживание. Если переменная name не существует или для нее не задано отслеживания, команда возвращает пустую строку.
    unknown
    Команда unknown обрабатывает попытки обратиться к несуществующей команде. СИНТАКСИС  
    unknown cmdName?arg arg ┘?
    ОПИСАНИЕ  
    Интерпретатор Tcl выполняет эту команду каждый раз, когда скрипт пытается обратиться к несуществующей команде. Исходный вариант unknown не является функцией ядра Tcl; напротив, это библиотечная процедура, определяемая по умолчанию при запуске Tcl. Разработчик может переопределить ее функциональность так, как ему нужно.

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

    Команда unknown обычно выполняет поиск по библиотечным каталогам процедуры с именем cmdName, или поиск полного имени команды, к которой обратились по сокращенному имени, или автоматический запуск неизвестной команды как подпроцесса. При успешном поиске полного имени команды команда unknown заменяет имя на полное и вызывает команду с полным именем. Результат работы команды unknown используется вместо результата неопределенной команды.

    Создаваемая по умолчанию процедура unknown выполняет следующие действия.

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

    В противном случае вызывается процедура auto_execok чтобы найти исполняемый файл с именем cmdName. Если файл удалось найти, выполняется команда exec с именем команды и ее аргументами в качестве аргументов.

    В противном случае проверяется, была ли неизвестная команда вызвана на самом верхнем уровне вне какого-либо скрипта. Если это было так, процедура unknown выполняет следующие дополнительные действия: проверяется не имеет ли команда одну из следующих форм:!!,!event, или ^old^new?^? и если да, то процедура unknown выполняет для них подстановки по тем же правилам, что и csh.

    И при неудаче всех предыдущих попыток процедура unknown проверяет, не является ли cmdName сокращением для известной Tcl процедуры. Если так, то cmdName заменяется на полное имя процедуры и она вызывается с исходными аргументами.

    Если же ни одна из попыток не привела к успеху, процедура возвращает ошибку.

    Если определена глобальная переменная auto_noload, попытка загрузить процедуру с помощью auto_load не производится.

    Если определена глобальная переменная auto_noexec, попытка загрузить процедуру с помощью auto_execok не производится.

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

    unset
    Команда удаляет переменные. СИНТАКСИС unset name?name name ┘? ОПИСАНИЕ Команда unset удаляет переменные name. Правила именования переменных точно такие же, как для команды set. Если в команде указано имя элемента массива, то этот элемент будет удален из массива, не влияя на остальную часть массива. Если указано имя массива без индекса в скобках, то будет удален весь массив.

    Команда возвращает пустую строку. Если одна из переменных не существует, команда вернет ошибку, а последующие переменные не будут удалены.
     
     
     


    update
    Команда update обрабатывает события, находящиеся в состоянии ожидания, и обратные вызовы (idle callbacks). СИНТАКСИС update?idletasks? ОПИСАНИЕ С помощью этой команды обновляется состояние приложения, поскольку при ее вызове обрабатываются все необработанные события и выполняются все асинхронные вызовы (idle callbacks).

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

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


    uplevel
    Команда выполняет скрипт в контексте, отличном от текущего. СИНТАКСИС  
    uplevel?level? arg?arg...?
    ОПИСАНИЕ  
    Все аргументы команды объединяются как при выполнении команды concat. Получившийся скрипт выполняется в контексте, указанном level. Команда возвращает результат выполнения скрипта.

    Если аргумент level задан как целое число, он указывает на сколько уровней выше уровня контекста текущей процедуры надо подняться в стеке вызовов перед выполнением скрипта. Если аргумент level задан как символ ▒#▓ с последующим целым числом, то он задает абсолютный уровень контекста в стеке. Если аргумент level отсутствует, то используется значение по умолчанию ▒1▓. Аргумент level должен быть указан, если первый из аргументов arg начинается с цифры или символа ▒#▓.

    Например, предположим, что на самом верхнем уровне вызвана процедура a из нее вызвана процедура b, а из b вызвана процедура c. Предположим также, что в процедуре c есть вызов команды uplevel. Тогда если аргумент level равен ▒1▓ или ▒#2▓ или отсутствует, то указанный в команде скрипт будет выполнен в контексте процедуры b. Если аргумент level равен ▒2▓ или ▒#1▓, то указанный в команде скрипт будет выполнен в контексте процедуры a. Если аргумент level равен ▒3▓ или ▒#0▓, то указанный в команде скрипт будет выполнен на вернем уровне (уровень глобальных переменных).

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

    uplevel 1 {set x 43; d} где d ≈ имя другой Tcl ≈ процедуры, то команда set изменит переменную x в контексте процедуры b, а процедура d будет выполняться на третьем уровне стека, как если бы она была вызвана непосредственно из b. Если в процедуре d в свою очередь содержится команда uplevel {set x 42} то команда set изменит значение той же переменной x в контексте процедуры b. Процедура c во время выполнения процедуры d не будет видна в стеке. Соответственно команда info level возвратит уровень текущей процедуры.

    Команда uplevel позволяет создавать новые управляющие конструкции как Tcl-процедуры.

    Команда namespace eval так же, как и вызовы процедур, изменяет контекст, в котором выполняются команды. Соответственно, для каждой команды namespace eval  создается дополнительный уровень в стеке. Поэтому при указании уровня контекста в стеке каждую вложенную команду namespace eval  надо считать наравне с вызовом процедуры. Это относится также к командам upvar и info level. Например, команда

    info level 1 вернет список, описывающий самую верхнюю выполняемую команду, которая является либо вызовом процедуры, либо командой namespace eval. Независимо от использования команда namespace eval  команда uplevel #0 выполнит соответствующий скрипт на уровне глобальных переменных (в глобальном пространстве имен).
    upvar
    Команда создает связи между переменными различных уровней стека

    СИНТАКСИС

    upvar?level? otherVar myVar?otherVar myVar...?

    ОПИСАНИЕ

    Команда позволяет одной или больше локальным переменным текущей процедуры ссылаться на переменные процедуры, стоящей выше в стеке, или на глобальные переменные. Аргумент level может иметь те же формы, что и в команде uplevel, или быть опущен, если первый символ в первой из otherVar отличен от цифры и от # (значение по умолчанию ▒1▓). Для каждой пары аргументов otherVar myVar команда позволяет сделать переменную с именем otherVar из указанного уровня стека (локальную переменную одной из вызывающих процедур или глобальную переменную, если level равно #0) видимой в исполняемой процедуре под именем myVar. Переменная с именем otherVar не обязана существовать в момент исполнения команды. При необходимости она будет создана при первом использовании переменной myVar. В момент исполнения команды не должно быть доступной переменной myVar. Переменная myVar всегда считается простой переменной (не массивом и не переменной массива). Даже если значение myVar выглядит как имя элемента массива, например, a(b), создается простая переменная. Значение otherVar может быть именем простой переменной, массива или элемента массива. Команда upvar всегда возвращает пустую строку.

    Команда upvar позволяет упростить передачу параметра по ссылке, а также упрощает создание новых управляющий конструкций. Например, рассмотрим следующую процедуру:

    proc add2 name {

    upvar $name x

    set x [expr $x+2]

    }

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

    Команда namespace eval так же, как и вызовы процедур, изменяет контекст, в котором выполняются команды. Для каждой команды namespace eval  создается дополнительный уровень в стеке. Соответственно, при указании уровня контекста в стеке каждую вложенную команду namespace eval  надо считать наравне с вызовом процедуры. Это относится также к командам uplevel и info level. Например, команда info level 1 вернет список, описывающий самую верхнюю выполняемую команду, которая является либо вызовом процедуры, либо командой namespace eval . Независимо от использования команда namespace eval  команда uplevel #0 выполнит соответствующий скрипт на уровне глобальных переменных (в глобальном пространстве имен).

    Если переменная, созданная с помощью команды upvar, удаляется (например, если добавить в процедуру add2 строку unset x), то реально будет удалена переменная, связанная с x, а не сама переменная x. Нет никакого способа удалить созданные таким образом переменные, кроме как выйти из процедуры, в которой они были созданы. Тем не менее, возможно связать переменную верхнего уровня с другой локальной переменной, выполнив еще одну команду upvar.
     

    ОШИБКИ  
    Если otherVar есть элемент массива, то отслеживание массива в целом, заданной командой trace, не сработает при действиях с myVar (однако, если отслеживание было задано на отдельный элемент массива, оно сработает). В частности, изменения, сделанные с помощью myVar в массиве env, не будут корректно переданы подпроцессу.

    variable
    Команда создает и запускает переменные области имен. СИНТАКСИС  
    variable?namevalue┘? name?value?
    ОПИСАНИЕ  
    Обычно команду variable выполняют внутри команды namespace eval  для создания одной или нескольких переменных в области имен. Каждая переменная name получает начальное значение value. Значение для последней переменной можно не указывать.

    Если переменная name не существует, она будет создана. Если указан аргумент value, то переменной присвоится его значение. Если аргумент не указан, то новая переменная останется неопределенной. Если же переменная уже существовала, она сохранит свое значение. Обычно имя создаваемой переменной √ это простое имя, не содержащее имя пространств имен. Соответственно переменная создается в текущем пространстве имен. Если имя содержит имена пространств имен, переменная создается в указанном пространстве имен.

    Если команда variable выполняется внутри Tcl процедуры, она создает локальную переменную, связанную с соответствующей переменной пространства имен. В этом случае команда variable напоминает команду global, которая, однако, только связывает локальную переменную с глобальной. Если аргумент value задан, то он используется для изменения значения соответствующей переменной в пространстве имен. Если переменная в пространстве имен не существует, она создается и, при необходимости, инициализируется.

    Параметр name не может указывать на элемент массива. В команде variable можно указать только массив в целом, а затем присвоить значения его элементам командами set или array.

    vwait
    Команда задает обработку событий до тех пор, пока не будет записано значение переменной. СИНТАКСИС  
    vwait?varName?
    ОПИСАНИЕ  
    Команда vwait активизирует обработчик событий (event loop), блокируя приложение до тех пор, пока не в результате какого-либо события не будет присвоено новое значение переменной varName. После присвоения значения переменной varName команда vwait завершит работу сразу после выполнения скрипта, вызванного обработчиком событий.

    В некоторых ситуациях команда не завершается сразу после присвоения значения переменной varName. Это происходит, например, если вызванный по события скрипт, присвоивший новое значение переменной varName, не завершается сразу. Например, если в нем в свою очередь выполняется команда vwait, устанавливающая режим ожидания изменения другой переменной. Во время этого ожидания вышестоящая команда vwait блокируется как и приложение до выполнения соответствующего события.
     
     


    while
    Команда выполняет скрипт до тех пор, пока не будет выполнено условие. СИНТАКСИС  
    while test body
    ОПИСАНИЕ  
    Команда while вычисляет значение выражения test подобно команде expr. Значение должно быть булевого типа. Если результат есть ⌠истина■, то скрипт body передается на выполнение Tcl интерпретатору. После этого выражение test снова вычисляется, и процесс повторяется до тех пор, пока его значение не станет ⌠ложь■. В тексте скрипта body можно использовать команду continue для завершения текущего цикла и команду break для немедленного завершения команды while.

    Команда while всегда возвращает пустую строку.

    Выражение test почти всегда лучше заключать в фигурные скобки, иначе подстановки команд и переменных в нем будут выполнены до исполнения команды и никакие изменения значений переменных в скрипте body не изменят значения выражения test. Это может привести к возникновению бесконечного цикла. Если же выражение test помещено в фигурные скобки, подстановки в нем выполняются при каждом вычислении (перед каждым выполнением body). Например, если выполнить следующий скрипт с и без скобок вокруг $x<10, то без скобок возникнет бесконечный цикл.

    set x 0
    while {$x<10} { puts ⌠x is $x■
    incr x
    }

    Все права защищены 1992-1999 DataX/FLORIN, Inc.


    РЕКОМЕНДАЦИИ ПО ПРОГРАММИРОВАНИЮ НА TCL/TK

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

    Изначально пакет Tcl/Tk создавался для разработки интерфейса в графической среде X Window System. Поэтому концепция программирования на Tcl/Tk построена на программировании в этой среде с использованием базового элемента ≈ библиотеки разработки пользовательского интерфейса Motif.

    Другим базовым элементов, на котором основан Tcl/Tk, это менеджер окон, который входит в состав стандартной графической среды операционной системы.

    При этом менеджер окон отвечает за управление окнами на рабочем пространстве экрана (открытие, закрытие, перемещение и т. д.), а интерфейс программирования Motif за объекты, находящиеся внутри окон.

    Для программиста, разрабатывающего на Tcl/Tk, оба эти элемента объединены в одно целое и работают вместе.

    Одним из основных элементов системы программирования, является так называемый виджет (widget). Виджет ≈ это объект со своими свойствами и внешним представлением. Например, кнопка, поле ввода или полоса прокрутки. Каждый виджет является объектом графической среды X Window, и является, по своей сути, ⌠окном■. Каждый виджет может иметь набор связанных с ним других виджетов, а так же входить в другой набор, относящийся к родительскому, главному виджету. Таким образом, получается дерево объектов-виджетов
    (см. Рисунок 1).

    Каждому виджету соответствует имя, например, .a.b.c. Это имя отражает ту ⌠ветвь дерева■, где оно находится. Например, виджеты .a.b.c и a.b.d входят в набор объектов относящихся к виджету a.b, а виджет с именем a.e входит в группу объектов, относящихся как к объекту .a, как и объект a.b. Виджет с именем ⌠.■, является главным объектом-окном приложения.

    Следует заметить, что только главное окно имеет средства управления (перемещения, изменение размера и т.д.). Поэтому в Tcl/Tk введена возможность создавать новые главные дополнительные подокна (toplevel), причем их имена будут состоять из знака ⌠.■ и имени, например, .dialog.

    Рисунок 1

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

    Создав необходимые объекты, программа автоматически переходит в состояние ожидания событий. Событие ≈ это сигнал, который формирует операционная система и говорит, что в ней что-то произошло, например, нажали на кнопку манипулятора ⌠Мышь■ или на клавиатуре нажали клавишу, или какое-либо другое событие.

    Для каждого виджета можно описать действия, которые необходимо выполнить при появлении нужного события. Например, при нажатии кнопки ⌠Загрузка■, произвести загрузку файла или какую-либо другую операцию.

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

    СОЗДАНИЕ ОКОН При старте графической оболочки Tcl/Tk автоматически создается главное окно приложения с именем ⌠.■ и в нем можно сразу располагать новые объекты.

    Однако, как было сказано выше, очень часто бывает необходимо создать диалоговое окно, которое независимо от главного. Для этого использую команду toplevel. Имя этого окна должно состоять из точки и имени (.message). Для смены фокуса ввода (перевести созданное окно или любое другое в активное состояние) необходимо использовать команду focus.

    СОЗДАНИЕ И УНИЧТОЖЕНИЕ ОБЪЕКТА Создать какой-либо виджет довольно просто, для этого нужно вызвать команду создания и указать имя и необходимые дополнительные параметры.

    К командам создания относятся:

    frame ≈ создать область на окне
    label ≈ создать текстовую метку (однострочная)
    message ≈ создать текстовую метку (многострочная)
    button ≈ создать кнопку
    listbox ≈ создать список
    scrollbar ≈ создать полосу прокрутки
    scale ≈ создать ⌠ползунок■
    entry ≈ создать поле ввода
    menu ≈ создать меню
    menubutton ≈ создать элемент меню
    canvas ≈ создать поле графического вывода
    Например, для создания кнопки с текстом ⌠Выход■ необходимо выполнить команду:

    button .b_exit -text Выход
     

    button ≈ тип создаваемого объекта,
    .b_exit ≈ имя объекта
    -text Выход ≈ текст, выводимый на кнопке.
    Уничтожение объектов производиться командой destroy, причем вместе с родительским объектом уничтожаются все производные от него объекты.

    destroy .b_exit

    РАЗМЕЩЕНИЕ ОБЪЕКТОВ В ОКНЕ  Создание объектов, которые должны использоваться в окне диалога, еще не означает их появления на рабочем экране. Для того, чтобы отобразить их на экране, необходимо их расположить в родительском окне.

    Для этой цели служат команды packи place.

    По именам этих команд видно, что команда packупаковывает выводимые объекты в родительском окне, а команда place располагает их по заданным координатам.

    Наибольшей популярностью пользуется команда pack, так как при изменении размеров главного окна, объекты равномерно распределяются по окну согласно заданным порядку и размерам. Программисту нет необходимости задумываться о координатах объектов.

    Команда packимеет простой синтаксис, но на опциях side и fill необходимо остановиться подробнее. Они указывают, где и как размещать объект.

    Рисунок 2

    Опция -side. На примере (см.  Рисунок 2 а) показан, результат выполнение команды pack .ok .cancel .help. -side left. Если во время выполнения программы растянуть окно, то оно будет выглядеть как на Рисунке 2b.

    Если опцию -side left заменить на -side top, то оно будет выглядеть как на Рисунке 2c.

    Рисунок 3

    Опция -fill pack .ok .cancel .help. -side top -fill x ( Рисунок 3) определяет, нужно ли растягивать объекты на всю длину/ширину окна. Сравните окна на Рисунках 4 и 5.


     

    Рисунок 4

    Рисунок 5

    Существую и другие опции команды pack.
     

    СОБЫТИЯ Обработка событий, связанных с объектом, происходит путем вызова процедур, которые указываются при инициализации или с помощью команд bind и tkerror.

    У многих виджетов имеется событие, которое связано с ним по умолчанию. Так, у кнопки это событие, которое генерируется при ее нажатии. Процедуру обработки таких событий можно задать при создании объекта (опция -command) или путем модификации этой опции. Например:
     

    button .ok -text Выполнить -command on_press_ok или button .ok -text Выполнить .ok configure -command on_press_ok где on_press_ok имя процедуры обработки события ≈ нажатие на кнопку. Синтаксис языка Tcl дает возможность вместо имени процедуры написать тело процедуры:
      button .ok -text Выполнить -command { puts "Нажата кнопка Выполнить■ } Также можно менять обработчик события по ходу выполнения программы, в зависимости от требований задачи или определенной ситуации (используют опцию configure).

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

    Ниже приведен список событий, которые генерируются системой:

    Key или KeyPress клавишу нажали
    KeyRelease клавишу отпустили
    Button или ButtonPress кнопку ⌠Мыши■ нажали
    ButtonRelease  кнопку ⌠Мыши■ отпустили
    Enter указатель курсора переместился в область виджета
    Leave указатель курсора покинул область виджета
    Motion указатель курсора переместился в другое место
    Существует еще один тип события, это событие ошибки системы X Window. Процедуру обработки указывают с помощью команды tkerror.

    При связывании события и процедуры можно указать уточнение, к какому элементу устройства должно относиться событие (левая или правая кнопка ⌠Мыши■, клавиша Ctrl и т.д.).Существую следующие модификаторы:

    Contol ≈ клавиша Ctrl
    Shift ≈ клавиша Shift
    Lock ≈ клавиша фиксации клавиатуры
    Button1, B1 ≈ первая кнопка ⌠Мыши■
    Button2, B2 ≈ вторая кнопка ⌠Мыши■
    Button3, B3 ≈ третья кнопка ⌠Мыши■
    Button4, B4 ≈ четвертая кнопка ⌠Мыши■
    Button5, B5 ≈ пятая кнопка ⌠Мыши■
    Any ≈ любой символ
    Double ≈ двойное нажатие кнопки
    Triple ≈ тройное нажатие кнопки
    Mod1, M1, Meta, M ≈ назначенная клавиша средствами X Windows
    Mod2, M2, Alt ≈ назначенная клавиша средствами X Windows
    Mod3, M3 назначенная клавиша средствами X Windows
    Mod4, M4 назначенная клавиша средствами X Windows
    Mod5, M5 назначенная клавиша средствами X Windows
    Например, команда bind .w <B3-ButtonRelease> do_help
    при нажатии правую кнопку на манипуляторе ⌠Мышь■ вызовет процедуру do_help.


    При вызове процедуры в качестве параметров можно указать значения специфичных параметров события ≈ такие как координаты указателя манипулятора ⌠Мышь■, код клавиши и другие.

    СИНТАКСИС ОПИСАНИЕ СИНТАКСИС ОПИСАНИЕ
    Bind
    СИНТАКСИС ОПИСАНИЕ ОБРАЗЦЫ СОБЫИЙ МОДИФИКАТОРЫ ТИПЫ СОБЫТИЙ ПОДСТАНОВКИ И СКРИПТЫ ПРИВЯЗКИ  
    NotifyAncestor NotifyNonlinearVirtual
    NotifyDetailNone NotifyPointer
    NotifyInterior NotifyPointerRoot
    NotifyNonlinear NotifyVirtual
    НЕСКОЛЬКО ПРИВЯЗОК, ОТВЕЧАЮЩИХ ОБРАЗЦУ
     
    Данному X событию может отвечать несколько привязок. Если эти привязки соответствуют различным тегам, то все они выполняются по очереди. По умолчанию сначала исполняется привязка для примитива, затем привязка класса, затем привязка верхнего уровня и привязка all. Этот порядок для конкретного окна можно поменять с помощью команды bindtags, которая позволяет также выполнить дополнительные привязки к окну.
    Управление обработкой скриптов, отвечающих образцу, осуществляется командами continue и break в привязанном скрипте. При выполнении команды continue выполнение текущего привязанного скрипта прерывается и Tk переходит к выполнению скриптов, соответствующих остальным тегам. При выполнении команды break  выполнение текущего привязанного скрипта прерывается и никакие другие скрипты не выполняются.

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

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

    б) более длинная последовательность (по числу отвечающих образцу событий) конкретнее более короткой;

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

    г) виртуальное событие, физический образец которого соответствует последовательности, менее конкретно, чем тот же самый физический образец, не связанный ни с каким виртуальным событием;

    д) если последовательность отвечает двум или более виртуальным событиям, то из них выбирается какое-нибудь одно, однако порядок выбора не определен.
    Если в подходящей последовательности событий больше одного события, то критерии (а) - (д) применяются ко всем событиям, начиная с самого последнего и до самого первого события последовательности. Если критерии не позволяют определить победителя, то победителем становится событие, зарегистрированное последним.

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

    event add <<Paste>> <Control-y>

    event add <<Paste>> <Button-2>

    event add <<Scroll>> <Button-2>

    bind Entry <<Paste>> {puts Paste}

    bind Entry <<Scroll>> {puts Scroll}

    При нажатии Control-y будет выполнена привязка <<Paste>>, а при нажатии кнопки 2 ≈ одна из привязок <<Paste>> или <<Scroll>>, причем определить какой именно будет эта привязка, невозможно.

    Если X событие не подходит ни под одну из существующих привязок, то событие игнорируется. Наступление не привязанного события не считается ошибкой.

    ПОСЛЕДОВАТЕЛЬНОСТИ НЕСКОЛЬКИХ СОБЫТИЙ И ИГНОРИРУЕМЫЕ СОБЫТИЯ
    Если аргумент последовательность в команде bind состоит из нескольких образцов событий, то скрипт выполняется в случае, если последние события (включая самое последнее) подходят под данную последовательность. Это означает, например, что при неоднократном последовательном нажатии кнопки 1 каждое из нажатий, за исключением самого первого, отвечает образцу <Doudble-ButtonPress-1>. Если в последовательности событий происходят посторонние события, то они игнорируются, за исключением событий KeyPress и ButtonPress. Например, нажатия на кнопку ⌠1■ будут соответствовать образцу <Doudble-ButtonPress-1>, даже если их перемежают события ButtonRelease или Motion. Кроме того событию KeyPressможет предшествовать произвольная последовательность событий KeyPress для модификаторов, среди которых нет модификаторов, нарушающих соответствие образцу. Например, последовательности событий aBотвечает нажатие на клавишу a, отпускание клавиши a, нажатие на клавишу Shift и нажатие на клавишу b, так как нажатие на клавишу модификатора Shift игнорируется. И, наконец, если последовательно происходит несколько событий Motion, то для установления соответствия привязке берется последнее из них.


    ОШИБКИ

    bindtags


    Команда определяет, какие привязки относятся к окну и порядок обработки.
    СИНТАКСИС  
    bindtags window ?tagList?
    ОПИСАНИЕ  
    Когда с помощью команды bind создается привязка, ей ставятся в соответствие имя окна, имя класса, ключевое слово или какая-нибудь строка. Все эти формы называются тегами привязки (binding tag). Каждое окно имеет список тегов привязки, определяющих, каким образом обрабатываются события для данного окна. Когда в окне происходит событие, оно по очереди сличается с каждым из тегов окна, и для каждого тега исполняется та привязка, которая более всех соответствует событию и тегу.

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

    bitmap


    Встроенный тип изображений Tk, имеющих только два цвета. СИНТАКСИС image create bitmap ?name? ?options? ОПИСАНИЕ В терминах языка Tcl/Tk, bitmap ≈ это двухцветное изображение, пиксели которого могут отображать один из двух заданных цветов или быть прозрачными. Такое изображение имеет четыре аргумента: два цвета (переднего плана и фона) и два двоичных файла, называемых source (источник) и mask (маска). Оба файла задают значения '0' или "1" для пикселей прямоугольной области, оба файла должны быть одной размерности. Пиксели, для которых в маске задано значение "0", не отображают ничего (получается эффект прозрачности). Остальные пиксели имеют либо цвет переднего плана, если значение в source для пикселя равно "1", либо фоновый цвет в обратном случае.

    Подобно всем прочим изображениям, двухцветные изображения создаются при помощи команды image create. При создании нового bitmap Tk также создает команду с именем этого изображения. Команда может использоваться для выполнения различных операций над данным изображением.
     

    button
    Создание примитива кнопки и управление им.
     
  • Синтаксис
  • Стандартные параметры
  • Дополнительные параметры примитива
  • Описание
  • Команда примитива
  •  
    СИНТАКСИС  
    button имяПути параметры
    СТАНДАРТНЫЕ ПАРАМЕТРЫ
     
     
    -activebackground -cursor -highlightthickness
    -takefocus -activeforeground -disabledforeground
    -image text -anchor
    -font -justify -textvariable
    -background -foreground -padx
    -underline -bitmap -highlightbackground
    -pady -wraplength -borderwidth
    -highlightcolor -relief  

    Подробное описание этих параметров приведено в разделе options.

    ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА
      Имя параметра: -command
    Имя в Базе: command
    Класс в Базе: Command  
    Ассоциирует с кнопкой команду Tk. Обычно команда выполняется при отпускании клавиши 1 "Мыши".
    Имя параметра: -default
    Имя в Базе: default
    Класс в Базе: Default
      Задает одно из трех состояний изображения ободка кнопки: normal, active или disabled. В активном состоянии кнопка имеет изображение по умолчанию для данной платформы. В нормальном состоянии кнопка изображается в виде, предусмотренном данной платформой для кнопок не по умолчанию; при этом остается достаточно места для изображения кнопки по умолчанию. Нормальное и активное состояние приводят к появлению кнопок одинакового размера. Отключенное состояние приводит к выводу кнопки не по умолчанию, не оставляя при этом места для кнопки по умолчанию. Кнопка в отключенном состоянии может быть меньше кнопки в активном состоянии.


    Имя параметра: -height
    Имя в Базе: height
    Класс в Базе: Height
     

    Задает желаемую высоту кнопки. Если в кнопке выводится изображение или двуцветное изображение, то значение параметра задается в пикселях (т.е., в любом виде, приемлемом для Tk_GetPixels); высота текстовой кнопки задается числом строчек текста. Если параметр не задан, то высота кнопки вычисляется по ее содержимому.


    Имя параметра: -state
    Имя в Базе: state
    Класс в Базе: State

     
    Задает одно из трех состояний кнопки: normal, active или disabled. В нормальном состоянии кнопка изображается с использованием значений параметров foreground и background. В активном состоянии кнопка обычно находится, если на ней расположен курсор. Кнопка в активном состоянии изображается с использованием значений параметров activeForeground и activeBackground. Отключенное состояние указывает на то, что кнопка должна быть нечувствительной: привязки по умолчанию не приводят к запуску примитива и нажатия на кнопку "Мыши" игнорируются. В этом состоянии изображение кнопки определяется значениями параметров disabledForeground и background.


    Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width

     
    Задает желаемую ширину кнопки. Если в кнопке выводится изображение или двуцветное изображение, то значение параметра задается в пикселях (т.е., в любом виде, приемлемом для Tk_GetPixels); ширина текстовой кнопки задается числом символов. Если параметр не задан, то ширина кнопки вычисляется по ее содержимому.


    ОПИСАНИЕ

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

    Кнопка представляет собой примитив, в котором выводится текстовая строка, изображение или двуцветное изображение. Весь выводимый текст должен быть записан одним шрифтом, однако он может занимать несколько строчек на экране (если в нем есть символы перевода строки или задан параметр wrapLength). Один из символов текста может быть подчеркнут (в соответствии со значением параметра underline). В зависимости от значения параметра button кнопка имеет три разных вида; кнопка может выглядеть выпуклой, вдавленной или плоской, кроме того, она может мигать. При инициации кнопки (нажатием на клавишу 1 "Мыши", когда курсор "Мыши" находится на кнопке) выполняется команда Tcl, указанная в параметре -command.
     

    КОМАНДА ПРИМИТИВА  
    Команда button создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

    имяПути параметр арг арг ...

    Параметр и аргументы уточняют поведение команды. Примитивы кнопки допускают следующие формы команды:

    имяПути cget параметр

    Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды button. имяПути configure параметр значение параметр значение ... Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды button.
     

    имяПути flash

    Заставляет кнопку мигать. Этот эффект достигается путем многократного вывода изображения кнопки поочередно в активном и нормальном состоянии. По окончании работы команды кнопка остается в том же состоянии (активном или нормальном), что и перед началом ее выполнения. Если перед началом выполнения команды кнопка находится в состоянии disabled, то команда игнорируется. имяПути invoke Выполняет команду Tcl, ассоциированную с кнопкой (при наличии такой команды). Возвращаемое значение совпадает с возвращаемым значением команды Tcl (или является пустой строкой, если с кнопкой никакой команды не ассоциировано). Если перед началом выполнения команды кнопка находится в состоянии disabled, то команда игнорируется.


    При создании кнопки Tk, в соответствии с типом кнопки, автоматически создает привязки к ней, определяющие ее поведение по умолчанию:

    Кнопка становится активной при появлении над ней курсора "Мыши" и дезактивируется, когда курсор ее покидает. В системе Windows привязка активизируется только при нажатии клавиши "1" "Мыши" на кнопке.

    При нажатии клавиши "1" "Мыши" на кнопке кнопка "вдавливается", а при отпускании клавиши она восстанавливает свой первоначальный вид.

    Если на кнопке клавиша "1" "Мыши" была нажата, а затем отпущена, то выполняется команда, привязанная к данной кнопке. Этого, однако, не происходит, если в момент отпускания клавиши "Мыши" курсор "Мыши" находился вне поля кнопки.

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

    Если кнопка находится в состоянии disabled, то все описанные выше действия не приводят ни к какому результату: кнопка остается неактивной.

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

    canvas
     
    Создание примитивов канвы и работа с ними.  
     
  • Синтаксис
  • Стандартные параметры
  • Параметры, связанные исключительно с примитивами
  • Введение
  • Список вывода
  • Идентификаторы и теги элементов
  • Координаты
  • Преобразования
  • Индексы
  • Команда примитива
  • Обзор типов элементов
  • Дуги
  • Двуцветные элементы
  • Линии
  • Овалы
  • Многоугольники
  • Прямоугольники
  • Текстовые элементы
  • Окна
  • Типы элементов, определяемые в приложениях
  • Предпочтения
  • СИНТАКСИС
    canvas имяПути параметры


    СТАНДАРТНЫЕ ПАРАМЕТРЫ

     
     
    -background -highlightthickness -insertwidth
    -takefocus -borderwidth -insertbackground
    -relief -xscrollcommand -cursor
    -insertborderwidth -selectbackground -yscrollcommand
    -highlightbackground -insertofftime -selectborderwidth
    -highlightcolor -insertontime -selectforeground
    Подробное описание параметров приведено в разделе options.


    ПАРАМЕТРЫ, СВЯЗАННЫЕ ИСКЛЮЧИТЕЛЬНО С ПРИМИТИВАМИ

    Имя параметра: -closeenough
    Имя в Базе: closeEnough
    Класс в Базе: CloseEnough
     
    Задает значение с плавающей точкой, указывающее расстояние от курсора до объекта на экране, при котором курсор считается находящимся внутри объекта. По умолчанию имеет значение ⌠1.0■.


    Имя параметра: -confine
    Имя в Базе: confine
    Класс в Базе: Confine
     

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


    Имя параметра: -height
    Имя в Базе: height
    Класс в Базе: Height
     

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


    Имя параметра: -scrollregion
    Имя в Базе: scrollRegion
    Класс в Базе: ScrollRegion
     

    Задает список из четырех величин, описывающих координаты левой, верхней, правой и нижней границы прямоугольной области. Эта область используется для прокрутки и считается границей информации в канве. Каждая из координат может иметь любой вид из описанных ниже в (см. "Координаты").


    Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: width
     

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


    Имя параметра: -xscrollincrement
    Имя в Базе: xScrollincrement
    Класс в Базе: Scrollincrement
     

    Задает шаг горизонтальной прокрутки в любом из принятых видов для расстояний на экране. Если указанная величина положительна, то x-координата левой границы будет выбрана пропорциональной значению xScrollincrement с четным коэффициентом пропорциональности. Кроме того, шаг прокрутки (при нажатии на стрелки влево и вправо полосы прокрутки) также принимает значение xScrollincrement. Если значение параметра неположительно, то прокрутка выполняется без ограничений.
    Имя параметра: -yscrollincrement
    Имя в Базе: yScrollincrement
    Класс в Базе: Scrollincrement
      Задает шаг вертикальной прокрутки в любом из принятых видов для расстояний на экране. Если указанная величина положительна, то y-координата верхней границы будет выбрана пропорциональной значению yScrollincrement с четным коэффициентом пропорциональности. Кроме того, шаг прокрутки (при нажатии на стрелки вверх и вниз полосы прокрутки) также принимает значение yScrollincrement. Если значение параметра неположительно, то прокрутка выполняется без ограничений.


    ВВЕДЕНИЕ

     
    Команда canvas создает новое окно (заданное аргументом имяПути) и преобразует его в примитив канвы. С помощью описанных выше дополнительных аргументов в строке команды или в базе данных параметров можно задать такие характеристики канвы, как цвета или трехмерное представление. Команда canvas возвращает свой аргумент имяПути. В момент исполнения команды окно с именем имяПути должно отсутствовать, однако его ⌠родительское■ должно существовать.

    Примитивы канвы реализуют структурную графику. Канва изображает некоторый набор элементов, таких как прямоугольники, окружности, линии или текстовые элементы. Над элементами можно выполнять различные действия (например, передвигать или перекрашивать их), и к ним можно приписывать команды способом, аналогичным тому, как команда bind привязывает команды к примитивам. Можно, например, приписать некоторую команду событию <Button-1>, и эта команда будет выполняться всякий раз при нажатии кнопки 1 на данном элементе. Таким образом, поведение элементов канвы может определяться привязанным к ним скриптам Tcl.
     

    СПИСОК ВЫВОДА  
    Элементы канвы упорядочены, так что при выводе на экран сначала выводится первый элемент, за ним второй и так далее. Очередные выводимые элементы заслоняют элементы, уже выведенные на экран; иногда про них говорят, что они выводятся ⌠поверх■ первых. При создании нового элемента он заносится на последнее место в списке, поверх всех элементов, созданных ранее. Порядок элементов в списке можно поменять с помощью команд примитивов.

    Элементы-окна представляют собой исключение из приведенного правила. Базовая система управления окнами предполагает, что новое окно всегда выводится поверх всех предыдущих. Кроме того, команды примитивов канвы не влияют на порядок в стеке окон; вместо них надо использовать команды Tk raise и lower.
     

    ИДЕНТИФИКАТОРЫ И ТЕГИ ЭЛЕМЕНТОВ  
    Есть два способа обращаться к элементам примитивов канвы ≈ по идентификатору и по тегу. У каждого элемента есть свой уникальный идентификационный номер, присваиваемый при создании элемента. Идентификатор элемента никогда не изменяется, и ни один идентификатор не используется дважды на протяжении существования данного примитива канвы.

    Кроме того, каждому элементу канвы можно приписать несколько тегов. Тег ≈ это просто строка символов, и он может быть иметь любой вид кроме числового. Например, ⌠x123■ годится, а ⌠1■23■ нет. Один и тот же тег можно приписывать нескольким элементам. Обычно это свойство используется для объединения элементов по характерным признакам. Например, всем выбранным элементам можно приписать тег ⌠selected■.

    Тег all приписан по умолчанию всем элементам канвы; с его помощью выполняются операции на всех элементах канвы.

    Тегом current автоматически управляет Tk. Он относится к текущему элементу, находящемуся поверх всех остальных из тех, чья область покрывает положение курсора. Если курсор ⌠Мыши■ расположен вне примитива канвы или если он не накрывается никаким элементом, то тег current не приписывается никакому элементу.

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

    КООРДИНАТЫ  
    Все координаты канвы записываются в форме чисел с плавающей точкой. Координаты и расстояния на экране задаются в виде чисел с плавающей точкой, за которыми может следовать одна или несколько букв. Если буквы нет, то единицей измерения расстояния является пиксель. Буква m указывает на измерение расстояний в миллиметрах; буква c ≈ в сантиметрах; i ≈ в дюймах; p ≈ в точках принтера (1/72 дюйма). При перемещении по экрану вниз y-координата увеличивается; x-координата возрастает при перемещении по экрану вправо.


    ПРЕОБРАЗОВАНИЯ

     
    Обычно начало системы координат канвы расположено в верхнем левом углу окна, содержащего канву. Положение начала координат относительно окна можно изменить с помощью команд xview и yview. Обычно этой возможностью пользуются при прокрутке. Канва не позволяет растягивать систему координат или поворачивать ее по отношению к системе координат окна.

    Отдельные элементы канвы можно сдвигать с помощью описываемых ниже команд примитивов; их можно также растянуть или сжать, но нельзя повернуть.
     

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

    число

    Десятичное число, указывающее положение нужного символа внутри текстового элемента. "0" указывает на первый символ, ⌠1■ ≈ на второй и т.д. Отрицательные числа интерпретируются как 0, а числа, большие длины текстового элемента ≈ как если бы они равнялись этой длине. end Указывает на символ, следующий непосредственно за последним символом текстового элемента (совпадает с числом символов в элементе). insert

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

    sel.first

    Указывает на первый выделенный символ в элементе. Если в элементе нет выделенных символов, то такая форма запрещена. sel.last Указывает на последний выделенный символ в элементе. Если в элементе нет выделенных символов, то такая форма запрещена. @x,y Указывает на символ в позиции (x,y), где x и y заданы в координатной системе канвы. Если значения координат выходят за пределы, занятые текстовым элементом, то берется первый или последний символ в строке, ближайшей к указанной позиции.


    КОМАНДА ПРИМИТИВА

     
    Команда canvas создает новую команду Tcl с именем имяПути. С помощью этой новой команды можно выполнять различные операции над примитивами. Она имеет следующий общий вид:

    имяПутипараметр аргумент аргумент ...

    Параметр и аргументы уточняют поведение команды. В примитивах канвы могут встречаться следующие команды примитивов:
     

    имяПути addtagтег спец_поиска арг арг ... Добавляет тег к списку тегов, связанному с каждым элементом, удовлетворяющим ограничениям, заданным спец_поиска и аргументами (если такого тега в списке еще нет). Если ни один элемент не удовлетворяет наложенным ограничениям, то команда не производит никаких действий. Результатом выполнения команды является пустая строка. Спец_поиска и аргументы могут принимать следующие значения: above тегИлиИд Выделяет элемент, непосредственно следующий (расположенный поверх) за элементом тегИлиИд в списке вывода. Если аргумент тегИлиИд задает несколько элементов, то команда выполняется по отношению к последнему (самому верхнему) из них. all Выделяет все элементы канвы. below тегИлиИд Выделяет элемент, непосредственно предшествующий (расположенный ниже) элементу тегИлиИд в списке вывода. Если аргумент тегИлиИд задает несколько элементов, то команда выполняется по отношению к первому (самому нижнему) из них. closest x y нимб начало Выделяет элемент, ближайший к точке с координатами (x,y). Если таких элементов несколько (например, несколько элементов накрывают эту точку), то выделяется самый верхний из них. Нимб, если он задан, должен быть неотрицательным числом. Всякий элемент, расстояние от которого до точки (x,y) меньше, чем нимб, считается накрывающим эту точку. Аргумент начало позволяет обходить по кругу все ближайшие к точке элементы. Начало, если оно задано, представляет собой идентификатор или тег элемента (в случае, если это тег, будет выбран первый элемент списка, соответствующего данному тегу). В этой форме выделяется не самый верхний элемент из ближайших, а самый верхний из тех ближайших элементов, которые ниже элемента начало в списке вывода. В случае если таких элементов нет, команда выполняется так же, как и в отсутствие аргумента начало. enclosed x1 y1 x2 y2 Выделяет все элементы, заключенные внутри прямоугольника с углами (x1,y1) и (x2,y2). Величина x1 должна быть не меньше, чем x2, а y1 ≈ не меньше, чем y2. overlapping x1 y1 x2 y2I Выделяет все элементы, перекрывающиеся с прямоугольником с углами (x1,y1) и (x2,y2). Величина x1 должна быть не меньше, чем x2, а y1 ≈ не меньше, чем y2. withtag тегИлиИд Выделяет все элементы, заданные тегИлиИд.


    имяПути bbox тегИлиИд тегИлиИд тегИлиИд
     

    Возвращает список из четырех элементов ≈ приближенных значений координат прямоугольника, ограничивающего все элементы, заданные аргументами тегИлиИд. Список имеет вид ⌠x1 y1 x2 y2■, причем экранные представления элементов находятся в области, ограниченной слева вертикальной прямой с координатой x1, справа ≈ вертикальной прямой с координатой x2, сверху ≈ горизонтальной прямой с координатой y1, снизу ≈ горизонтальной прямой с координатой y2. Значения координат могут отличаться от точных на несколько пикселей. Если под описание тегИлиИд не подходит ни один элемент или если у этих элементов прямоугольники вывода пусты, то команда возвращает пустую строку.


    имяПути bind тегИлиИд последовательность команда

    Эта команда привязывает ко всем элементам, заданным аргументом тегИлиИд, команду, которая выполняется всякий раз при наступлении события, описываемого последовательностью, на одном из этих элементов. Эта команда похожа на команду bind, за исключением того, что она действует на элементах канвы, а не на целых примитивах. Синтаксис последовательности и подстановки, выполняемые в команде перед ее выполнением, подробно описаны в bind. Если в команде заданы все аргументы, то создаваемая привязка замещает все предыдущие привязки для той же последовательности и тегИлиИд (если первый символ в команде ⌠+■, то новая привязка присоединяется к уже существующим, а не замещает их). В этом случае команда возвращает пустую строку. Если аргумент команда опущен, то возвращается строка команды, связанной с тегИлиИд и последовательностью (если такой команды нет, то возникает ошибка). Если опущены оба аргумента команда и последовательность, то результатом выполнения служит список всех последовательностей, для которых определена привязка к тегИлиИд. Привязки можно задавать только для событий, связанных с клавиатурой или ⌠Мышью■ (таких как Enter, Leave, ButtonPress, Motion и KeyPress), а также для виртуальных событий. При работе с событиями в канве используется текущий элемент, определенный выше (см. ⌠Идентификаторы и теги  элементов■). События Enter и Leave наступают, когда элемент становится или перестает быть текущим; обратите внимание на отличие этих событий от событий Enter и Leave для окон. События, связанные с ⌠Мышью■, наступают только для текущего элемента (если таковой имеется; подробности см. ниже в описании команды примитива focus). При использовании в привязке виртуального события привязка может подключиться только, если в определении этого виртуального события участвует событие, связанное с ⌠Мышью■ или клавиатурой.

    Данному событию может соответствовать несколько привязок. Такое может произойти, например, если одна привязка осуществляется к идентификатору события, а другая ≈ к одному из его тегов. В подобном случае выполняются все привязанные события. Первым идет скрипт, привязанный к тегу all, затем поочередно выполняются скрипты, привязанные к каждому из тегов элемента (в порядке их следования), последней идет привязка к идентификатору элемента. Если несколько привязок соответствует одному тегу, то выполняется лишь самая конкретная из них. Команда continue в скрипте прекращает его выполнение, команда break прекращает выполнение скрипта и всех последующих скриптов для события, как и в случае команды bind.

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

    имяПути canvasx xЭкрана шагСетки

    По заданной x-координате xЭкрана окна возвращает x-координату канвы, расположенной на этом месте. Если задан шагСетки, то координата канвы округляется к ближайшему кратному единиц шагаСетки.


    имяПути canvasy yЭкрана шагСетки

    По заданной y-координате yЭкрана окна возвращает y-координату канвы, расположенной на этом месте. Если задан шагСетки, то координата канвы округляется к ближайшему кратному единиц шагаСетки.


    имяПути cgetпараметр

    Возвращает текущее значение параметра конфигурации, заданного аргументом параметр.


    имяПути cоnfigure параметр значение параметр значение ...

    Сообщает текущие параметры конфигурации примитива или модифицирует их. Если параметр не задан, то возвращает список всех текущих значений параметров имениПути (формат списка приведен в описании Tk_ConfigureInfo). Если параметр задан без указания значения, то команда возвращает список, описывающий указанный параметр (этот список совпадает с частью списка, возвращаемого при отсутствии параметра). Если заданы одна или несколько пар параметр-значение, то команда присваивает указанным параметрам примитива данные значения; результатом ее выполнения в этом случае служит пустая строка. Параметр может принимать любые значения, воспринимаемые командой canvas.


    имяПути coords тегИлиИд x0 y0 ...

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


    имяПути create типx y x y ... параметр значение ...

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


    имяПути dchars тегИлиИд первый последний

    Удаляет символы с первого по последний включительно в каждом элементе, подходящем под описание тегИлиИд. Если какие-либо из этих элементов не поддерживают текстовых операций, то они пропускаются. Аргументы первый и последний должны быть индексами символов в элементе, заданными в соответствии с описанием, приведенным в разделе  Индексы . При опущенном аргументе последний его значение принимается по умолчанию равным значению первый. Команда возвращает пустую строку.


    имяПути delete тегИлиИд тегИлиИд ...

    Удаляет все элементы, подходящие под описание, заданное аргументами, и возвращает пустую строку.


    имяПути dtagтегИлиИд тегДляУдаления

    Удаляет все теги тегДляУдаления из списка тегов, ассоциированного с каждым из элементов, описываемых аргументом тегИлиИд. Если ни один из тегов такого элемента не входит в тегДляУдаления, то никаких действий не производится. Если аргумент тегДляУдаления отсутствует, то его значение по умолчанию совпадает с тегИлиИд. Команда возвращает пустую строку.


    имяПути findкомандаПоиска арг арг ...

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


    имяПути focus тегИлиИд

    Устанавливает фокус клавиатуры для примитива канвы на элементе, заданном аргументом тегИлиИд. Если под описание подходят несколько элементов, то фокус устанавливается на тот из них, который идет первым в списке вывода из элементов, поддерживающих курсор ввода. Если под описание не подходит ни один из элементов или если ни один из подходящих элементов не поддерживает курсор ввода, то фокусировка не меняется. Если тегИлиИд представляет собой пустую строку, то ни один из элементов не оказывается в фокусе. Если аргумент тегИлиИд не задан, то команда возвращает идентификатор элемента, находящегося в фокусе или пустую строку, если такого элемента нет. После установки фокуса на элемент в этом элементе будет отображаться курсор ввода и все клавиатурные события будут направлены на этот элемент. Элемент фокусировки канвы и окно фокусировки на экране (установленное командой focus) совершенно независимы: элемент находится в фокусе ввода только если (а) его канва является окном фокусировки и (б) сам элемент является элементом фокусировки канвы. В большинстве случаев полезно вслед за командой focus примитива выполнять команду focus, чтобы установить фокус на канве (если такая установка еще не была произведена).  


    имяПути gettags тегИлиИд

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


    имяПути icursor тегИлиИд индекс

    Устанавливает курсор ввода для элемента (элементов), подходящего под описание тегИлиИд, в положение, непосредственно предшествующее символу, заданному аргументом индекс. Если некоторые (быть может, все) подходящие элементы не поддерживают курсор ввода, то над ними никаких действий не производится. Допустимые формы аргумента индекс описаны выше (см. Индексы). Замечание: фактическое высвечивание курсора ввода в элементе производится только, если этот элемент находится в фокусе (см. описание команды примитива focus), однако положение курсора можно установить и в элементе вне фокуса. Команда возвращает пустую строку.


    имяПути insert тегИлиИд передЭтим строка

    Вставляет строку перед символом, заданным аргументом передЭтим, в каждом из элементов, подходящих под описание тегИлиИд и поддерживающих курсор ввода. Возможные формы аргумента передЭтим описаны выше (см. Индексы). Команда возвращает пустую строку.


    имяПути itemcget тегИлиИд параметр

    Возвращает текущее значение параметра конфигурации с именем параметр для элемента тегИлиИд. Команда аналогична команде примитива cget, за исключением того, что она относится к отдельному элементу, а не к примитиву в целом. Значение параметра может быть любым, допустимым для команды примитива create, используемой для создания элемента. Если тег тегИлиИд описывает несколько элементов, то команда применяется к первому из них.


    имяПути itemconfigure тегИлиИд параметр значение параметр значение ...

    Команда аналогична команде примитива configure за исключением того, что она изменяет значения параметров элементов, а не всего примитива канвы. Если аргумент параметр не задан, то команда возвращает список значений параметров для первого элемента, подходящего под описание тегИлиИд (формат списка описан в Tk_ConfigureInfo). Если аргумент параметр задан, а аргумент значение отсутствует, то команда возвращает список значений только указанного параметра (этот список является подсписком списка, возвращаемого в отсутствие аргумента параметр). Если задано несколько пар параметр-значение, то команда устанавливает новые значения указанных параметров для каждого из элементов тегИлиИд; в этом случае команда возвращает пустую строку. Допустимые формы параметров и значений такие же, как в команде примитива create, которая создает элементы. Допустимые параметры и возможные их значения описаны ниже (см. описание отдельных типов элементов).


    имяПути lower тегИлиИд нижеЭтого

    Передвигает все элементы, подходящие под описание тегИлиИд, в списке вывода непосредственно перед элементом, заданным аргументом нижеЭтого. Если под описание подходят несколько элементов, то они передвигаются все, причем их относительный порядок сохраняется. Аргумент нижеЭтого представляет собой тег или идентификатор; если он описывает несколько элементов, то для размещения тегИлиИд используется первый из них. Замечание: на элементы окон эта команда влияния не оказывает. Элементы окон перекрывают элементы других типов и на порядок их расположения влияют команды raise и lower, а не команды raise и lower примитивов канвы. Команда возвращает пустую строку.


    имяПути moveтегИлиИд xКоличество yКоличество

    Сдвигает каждый из элементов, подходящих под описание тегИлиИд, прибавляя к координатам каждой точки элемента координаты xКоличество и yКоличество. Команда возвращает пустую строку.


    имяПути postscript параметр значение параметр значение ...

    Генерирует Postscript-представление для каждой канвы или для некоторых из них. Если параметр имеет вид -file, то Postscript-представление записывается в указанный файл, а команда возвращает пустую строку; в противном случае возвращается сгенерированное Postscript-представление. Если интерпретатор, владеющий канвой, помечен как безопасный, то операция закончится неудачно, так как безопасным интерпретаторам не разрешается записывать файлы. Если задан параметр -channel, то аргументом является имя канала, открытого на вывод. Postscript-представление записывает в этот канал; по окончании выполнения команды канал остается открытым для последующих операций вывода. Postscript-представление создается в форме Encapsulated Postscript в соответствии с соглашением Documentation Structuring Conventions, v. 3.0. Замечание: по умолчанию Postscript-представление создается только для информации, выводимой в окно канвы на экране. Только что созданная канва имеет размер 1x1 пиксель, поэтому в Postscript ничего выведено не будет. Чтобы преодолеть эту трудность, необходимо либо выполнить команду ⌠update■ и дождаться пока окно достигнет своего нормального размера, либо задать размеры канвы для печати параметрами -width и -height. Пары аргументов параметр-значения используются для дополнительного управления характеристиками печати. Команда поддерживает следующие параметры:

    -colormap имяПеременной

    ИмяПеременной должно быть именем массива, описывающего палитру в Postscript. Значение каждого элемента этого массива должно кодировать установку в Postscript определенного цвета, например,1.0 1.0 0.0 setrgbcolor■. При выводе информации о цвете в Postscript Tk проверяет, есть ли в массиве имяПеременной элемент с таким же именем цвета. Если это так, то Tk использует значение этого элемента как команду Postscript для установки цвета. Если параметр -colormap не указан или если данному цвету не соответствует никакой элемент массива, то Tk берет интенсивность красного, голубого или зеленого X цвета.


    -colormode режим

    Задает способ вывода цветовой информации. Режим может принимать значения color (для полноцветного вывода), gray (преобразует все цвета к их серому аналогу), mono (переводит каждый цвет в черный или белый).


    -file имяФайла

    Задает имя файла вывода. Если этот параметр не указан, то команда возвращает результирующее Postscript-представление вместо записи его в файл.


    -fontmap имяПеременной

    ИмяПеременной должно быть именем массива, описывающего преобразование шрифтов. Каждый элемент массива должен представлять собой Tcl список из двух элементов ≈ имени и размера шрифта. При выводе Postscript команд для конкретного шрифта Tk проверяет, описан ли в массиве имяПеременной элемент с соответствующим именем. Если такой элемент есть, то в Postscript используется информация, содержащаяся в нем. В противном случае Tk пытается догадаться о том, какой шрифт использовать. Обычно эти попытки удаются только для стандартных шрифтов, таких как Times, Helvetica и Courier, и только в случае, если в имени X шрифта не пропущено ни одного дефиса перед размером. Так, например, имя -*_-Courier-Bold-R-Normal--*_-120-*_ будет воспринято нормально, а *Courier-Bold-R-Normal*120* ≈ нет; дефисы нужны Tk для распознавания имени шрифта.


    -height размер

    Задает высоту печатаемого поля канвы. По умолчанию имеет значение высоты окна канвы.


    -pageanchor якорь

    Указывает, какая из выводимых точек канвы должна попасть в опорную точку страницы печати (заданную параметрами -pagex и -pagey). Например, задание -pageanchor n означает, что при печати верхняя центральная точка окна канвы располагается в опорной точке страницы. По умолчанию параметр имеет значение center.


    -pageheight размер

    Указывает на необходимость растяжения страницы печати в горизонтальном и вертикальном направлении так, чтобы напечатанная в Postscript страница имела высоту размер. Значением параметра должно быть число с плавающей точкой, за которым следует символ c, если размер указан в сантиметрах, i ≈ в дюймах, m ≈ в миллиметрах, p или ничего ≈ в точках принтерах (1/72 часть дюйма). По умолчанию имеет значение высоты выводимой области экрана. Если заданы оба параметра -pageheight и -pagewidth, то для растяжения используется значение параметра -pagewidth (возможность неравномерного растяжения в двух направлениях не предусмотрена).


    -pagewidth размер

    Указывает на необходимость растяжения страницы печати в горизонтальном и вертикальном направлении так, чтобы напечатанная в Postscript страница имела ширину размер. Параметр может принимать такие же значения, что и параметр -pageheight. По умолчанию имеет значение ширины выводимой области экрана. Если заданы оба параметра -pageheight и -pagewidth, то для растяжения используется значение параметра -pagewidth (возможность неравномерного растяжения в двух направлениях не предусмотрена).


    -pagex координата

    Указывает x-координату опорной точки Postscript-страницы в любом виде, приемлемом для -pageheight. В сочетании с параметрами -pagey и -pageanchor позволяет задать размещение выводимой области на Postscript-странице. По умолчанию задает координату центра страницы.


    -pagey координата

    Указывает y-координату опорной точки Postscript-страницы в любом виде, приемлемом для -pageheight. В сочетании с параметрами -pagex и -pageanchor позволяет задать размещение выводимой области на Postscript-странице. По умолчанию задает координату центра страницы.


    -rotate булевское

    Булевское значение указывает, следует ли при печати повернуть страницу на 90 градусов. При обычном выводе ось x идет вдоль короткой стороны страницы (ориентация ⌠портрет■); после поворота она идет вдоль длинной стороны (ориентация ⌠пейзаж■). По умолчанию страница печатается без поворота.


    -width размер

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


    -x координата

    Задает x-координату левого края печатаемой области канвы (в координатах канвы, а не окна). По умолчанию совпадает с координатой левого края окна.


    -y координата

    Задает y-координату верхнего края печатаемой области канвы (в координатах канвы, а не окна). По умолчанию совпадает с координатой верхнего края окна.


    имяПути raise тегИлиИд вышеЭтого

    Передвигает все элементы, подходящие под описание тегИлиИд, в списке вывода непосредственно за элемент, заданный аргументом вышеЭтого. Если под описание подходят несколько элементов, то они передвигаются все, причем их относительный порядок сохраняется. Аргумент вышеЭтого представляет собой тег или идентификатор; если он описывает несколько элементов, то для размещения тегИлиИд используется последний (самый верхний) из них. Замечание: на элементы окон эта команда влияния не оказывает. Элементы окон перекрывают элементы других типов и на порядок их расположения влияют команды raise и lower, а не команды raise и lower примитивов канвы. Команда возвращает пустую строку.


    имяПути scale тегИлиИд xЦентр yЦентр xКоэффициент yКоэффициент

    Растягивает или сжимает все элементы, подходящие под описание тегИлиИд в координатном пространстве канвы. Аргументы xЦентр и yЦентр задают координаты центра преобразования, а xКоэффициент и yКоэффициент ≈ коэффициенты растяжения по осям x и y соответственно (значение ⌠1.0■ указывает на отсутствие растяжения). Расстояние по оси x каждой точки, задающей положение элемента, от центра растяжения увеличивается в xКоэффициент раз. Аналогично, расстояние по оси y каждой точки, задающей положение элемента, от центра растяжения увеличивается в yКоэффициент раз. Команда возвращает пустую строку.


    имяПути scanпараметр аргументы

    Используется для сканирования канвы. Имеет две формы в зависимости от значения параметра:


    имяПути scanmark x y

    Сохраняет x, y и текущий вид канвы для последующего использования командами scan dragto. Обычно эта команда используется в сочетании с нажатием клавиши ⌠Мыши■ в примитиве, а x и y являются координатами курсора ⌠ Мыши ■. Возвращает пустую строку.


    scan dragto x y

    Вычисляет разность между значениями координат x и y и значениями тех же координат, сохраненными последней командой scan mark на данном примитиве. Затем переносит изображение примитива на расстояние, в 10 раз превышающее вычисленную разность. Команда обычно связана с событиями движения ⌠ Мыши ■ в примитиве и используется для скоростного перетаскивания канвы в его окне. Возвращает пустую строку.


    имяПути select параметр тегИлиИд аргумент

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


    имяПути select adjust тегИлиИд индекс

    Определяет ближайший к указанному аргументом индекс положению край набора выделенных элементов в тегИлиИд и устанавливает новое значение этого края в индекс (т.е. элемент индекс входит в выделение, а соседний с ним ≈ нет). Противоположный край выделения становится опорной точкой для последующих команд select to. Если в текущий момент в тегИлиИд выделения отсутствуют, то команда ведет себя точно так же, как команда примитива select to. Возвращает пустую строку.


    имяПути select clear

    Очищает выделенные элементы в данном примитиве. Если таких элементов нет, то не производит никаких действий. Возвращает пустую строку.


    имяПути select from тегИлиИд индекс

    Устанавливает опорную точку выделения непосредственно перед символом, заданным аргументом индекс. Текущего выделения команда не меняет. Она лишь фиксирует начало выделения для последующих команд select to. Возвращает пустую строку.


    имяПути select item

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


    имяПути select to тегИлиИд индекс

    Выделяет все символы между опорным символом выделения и символом, указанным аргументом индекс, включая этот символ. Опорный символ включается в выделение, только если значение аргумента индекс больше номера опорного символа. Опорный символ устанавливается последней выполненной на данном примитиве командой select adjust или select from. Если опорный символ выделения в примитиве не входит в элемент, описываемый аргументом тегИлиИд, то опорная точка устанавливается на символ, указанный аргументом индекс. Команда возвращает пустую строку.


    имяПути typeтегИлиИд

    Возвращает тип элемента, описываемого аргументом тегИлиИд (например, rectangle или text). Если тегИлиИд описывает несколько элементов, то возвращается тип первого из них. Если ни один элемент не подходит под описание тегИлиИд, токоманда возвращает пустую строку.


    имяПути xview аргументы

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


    имяПути xview

    Возвращает список, состоящий из двух элементов. Каждый из элементов списка представляет собой вещественное число, заключенное между нулем и единицей; эта пара чисел описывает видимый в окне горизонтальный интервал. Так, например, если первое число равно .⌠2■, а второе .⌠6■, то 20% области канвы оказывается невидимой слева от окна, в окне выводится 40% информации, и еще 40% оказывается невидимой справа от окна.


    имяПути xview movetoчисло

    Передвигает область видимости так, что слева от окна остается невидимой часть канвы, указанная аргументом число. Число должно быть заключено между ▒0▓ и ⌠1■.


    имяПути xview scrollколичество что

    Сдвигает выводимый в окне текст вправо или влево, выравнивая его границу в соответствии со значениями аргументов. Количество должно быть целым числом, аргумент что может принимать значения units или pages или быть сокращением одного из этих слов. Если аргумент что принимает значение units, то выравнивание происходит относительно единиц, указанных значением параметра xScrollIncrement (если это значение положительно), или относительно десятой части ширины окна (в противном случае). Если значением аргумента что является pages, то единицей выравнивания служит величина в девять десятых ширины окна. Если количество отрицательно, то видимая информация сдвигается вправо, в противном случае ≈ влево.


    имяПути yview аргументы

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


    имяПути yview

    Возвращает список, состоящий из двух элементов. Каждый из элементов списка представляет собой вещественное число, заключенное между нулем и единицей; эта пара чисел описывает видимый в окне вертикальный интервал. Так, например, если первое число равно .⌠6■, а второе ⌠1.0■, то в окне выводятся нижние 40% области канвы (заданной значением параметра -scrollregion). Эти значения совпадают со значениями, передаваемыми полосам прокрутки через параметр -yscrollcommand.


    имяПути yview movetoчисло

    Передвигает область видимости так, что сверху от окна остается невидимой часть канвы, указанная аргументом число. Число должно быть заключено между ▒0▓ и ⌠1■.


    имяПути yview scrollколичество что

    Сдвигает выводимый в окне текст вверх или вниз, выравнивая его границу в соответствии со значениями аргументов. Количество должно быть целым числом, аргумент что может принимать значения units или pages или быть сокращением одного из этих слов. Если аргумент что принимает значение units, то выравнивание происходит относительно единиц, указанных значением параметра yScrollIncrement (если это значение положительно), или относительно десятой части высоты окна (в противном случае). Если значением аргумента что является pages, то единицей выравнивания служит величина в девять десятых высоты окна. Если количество отрицательно, то видимая информация сдвигается вниз, в противном случае ≈ вверх.


    ОБЗОР ТИПОВ ЭЛЕМЕНТОВ

     
    Ниже описываются различные типы элементов, поддерживаемые примитивами канвы. Каждый тип характеризуется, во-первых, формой команды create, посредством которой создаются элементы этого типа, и, во-вторых, набором параметров конфигурации элементов этого типа, которые можно использовать в командах примитива create и itemconfigure. Большинство типов не поддерживают выделение и индексирование и связанные с этими операциями команды, такие как index или insert. Для типов, поддерживающих указанные возможности, они описаны явно (пока речь идет только о текстовых элементах).
    ДУГИ  
    Элементы типа arc выводятся на экран в виде отрезка дуги. Дуга представляет собой отрезок овала, заключенный между двумя радиусами (заданными параметрами -start и -extent); она изображается на экране в одном из нескольких возможных видов в зависимости от значения параметра -style. Дуги создаются командами примитива.

    имяПути createarc x1 y1 x2 y2 параметр значение параметр значение ...

    Аргументы x1 y1 x2 y2 задают координаты противоположных углов прямоугольной области, в которую вписан овал. За координатами следует несколько пар параметр-значение, каждая из которых устанавливает значение одного из параметров конфигурации элемента. Такие же пары параметр-значение используются командами примитива itemconfigure для изменения параметров конфигурации. Команда поддерживает следующие параметры:


    -extent угол

    Задает величину сектора, содержащего дугу. Дуга простирается на угол, отсчитываемый от начальной точки дуги, заданной параметром -start. Угол может быть и отрицательным. Если его величина превосходит 360 градусов или оказывается меньше -360 градусов, то берется его значение по модулю 360.


    -fill цвет

    Закрашивает цветом область, ограниченную дугой. Аргумент цвет может принимать любое значение, воспринимаемое командой Tk_GetColor. Если значением цвета является пустая строка, то закрашивания не происходит. Пустая строка также принимается значением параметра по умолчанию.


    -outline цвет

    Цвет задает цвет контура дуги. Этот параметр может принимать любое значение, воспринимаемое командой Tk_GetColor. По умолчанию параметр имеет значение black. Если в качестве параметра задана пустая строка, то контур дуги не изображается.


    -outlinestippleдвуцвет

    Указывает, что контур дуги должен изображаться в соответствии с образцом пунктира. Аргумент двуцвет указывает этот образец, он может принимать любое значение, воспринимаемое командой Tk_GetBitmap. Если параметр -outline не задан, то задание параметра -outlinestipple не влияет на вывод. Если значением данного параметра является пустая строка, то дуга будет рисоваться сплошной линией.


    -start угол

    Задает положение начала сектора, содержащего дугу. Угол задается в градусах и отсчитывается против часовой стрелки от 3-часового положения часовой стрелки. Он может быть как положительным, так и отрицательным.


    -stipple двуцвет

    Указывает необходимость закрашивания области дуги в соответствии с образцом пунктира. Допустимы любые значения, воспринимаемые командой Tk_GetBitmap. Если параметр -fill не задан, то параметр -stipple не оказывает влияния на вывод. Если значением параметра -stipple является пустая строка, то выполняется сплошное закрашивание.


    -style тип

    Задает тип изображения дуги. Если тип имеет значение pieslice (по умолчанию), то область дуги имеет вид сектора, ограниченного дугой и двумя радиусами, проведенными из центра овала к ее концам. Тип chord указывает на то, что область имеет вид сегмента, ограниченного дугой и отрезком, соединяющим ее концы. Тип arc означает, что область дуги состоит из самой этой дуги. В последнем случае параметр -fill игнорируется.


    -tags списокТегов

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


    -width ширинаКонтура

    Задает ширину контура вокруг области дуги; значением параметра может быть любое допустимое значение координат, описанное выше (см. ⌠Координаты■). Если значением параметра -outline является пустая строка, то параметр -width не влияет на характер вывода. Широкий контур центрируется на отрезках, ограничивающих область дуги. По умолчанию параметр имеет значение ⌠1.0■.


    ДВУЦВЕТНЫЕ ЭЛЕМЕНТЫ

     
    Элементы типа bitmap изображаются на экране с помощью двух цветов: цвета фона и цвета переднего плана, Двуцветные изображения создаются командой примитива

    имяПути create bitmap x y параметр значение параметр значение ...

    Аргументы x и y задают координаты опорной точки двуцветного изображения на экране (подробнее процедура размещения изображения описана ниже при описании параметра -anchor). За координатами следует несколько пар параметр-значение, каждая из которых устанавливает значение одного из параметров конфигурации элемента. Такие же пары параметр-значение используются для изменения значений параметров с помощью команды примитива itemconfigure. Для двуцветных изображений допустимы следующие параметры:


    -anchor положениеОпоры

    ПоложениеОпоры указывает способ размещения изображения по отношению к его опорной точке. Параметр может принимать произвольное значение, воспринимаемое командой Tk_GetAnchor. Так, если параметр имеет значение center, то в опорной точке располагается центр изображения; значение n указывает, что в опорной точке располагается верхняя центральная точка изображения и т.д. По умолчанию параметр имеет значение center.


    -background цвет

    Задает цвет, используемый для отображения пикселей двуцветного изображения со значением ⌠0■. Параметр может принимать любое значение, воспринимаемое командой Tk_GetColor. Если параметр не задан или цвет является пустой строкой, то пиксели со значением ▒0▓ не выводятся, что создает эффект прозрачности.


    -bitmap двуцвет

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


    -foreground цвет

    Задает цвет пикселей двуцветного изображения, имеющих значение ⌠1■. Параметр может принимать любое значение, воспринимаемое командой Tk_GetColor; по умолчанию его значение black.


    -tags списокТегов

    Приписывает элементу список тегов. СписокТегов представляет собой список имен тегов, замещающий имеющиеся теги элемента. СписокТегов может быть пустым.
     
    ЛИНИИ  
    Элементы типа line выводятся на экран в виде прямо- или криволинейной ломаной. Линии создаются командой примитива

    имяПути create line x1 y1 ... xn yn параметр значение параметр значение ...

    Аргументы от x1 до yn задают координаты последовательности из двух или более точек, соединенных отрезками. За координатами может следовать произвольный набор пар параметр-значение, каждая из которых устанавливает значение одного из параметров элемента. С помощью тех же пар параметр-значения можно задать новые значения параметров командами примитива itemconfigure. Команда поддерживает следующие параметры:


    -arrow где

    Указывает, следует ли изображать стрелки на одном или обоих концах линии. Значение где может быть одним из следующих: none (стрелки не изображаются), first (изображается стрелка в начале линии), last (изображается стрелка в конце линии) или both (стрелка изображается на обоих концах).


    -arrowshape форма

    Описывает форму стрелки. Значением параметра должен быть список, содержащий три элемента, каждый из которых представляет собой расстояние в виде, описанном выше (см. ⌠Координаты■). Первый элемент списка задает расстояние вдоль линии от начала до острия стрелки. Второй элемент задает расстояние вдоль линии от хвостовых концов стрелки до ее острия, третий ≈ расстояние от внешнего ребра линии до хвостовых точек. Если параметр не задан, то Tk самостоятельно выбирает ⌠разумную■ форму стрелки.


    -capstyle стиль

    Описывает способ изображения концов линии в отсутствие стрелок. Параметр может принимать любое значение, воспринимаемое командой
    Tk_GetCapstyle (butt, projecting или round). По умолчанию имеет значение butt. При наличии стрелок параметр игнорируется.


    -fill цвет

    Задет цвет изображаемой линии. Параметр может принимать любое значение, воспринимаемое командой Tk_GetColor. Если значением параметра является пустая строка, то линия будет прозрачной. По умолчанию цвет имеет значение black.


    -joinstyle стиль

    Задает способ соединения отрезков линии в вершинах. Параметр может принимать любое значение, воспринимаемое командой Tk_GetCapstyle (bevel, miter или round). По умолчанию имеет значение miter. При наличии всего двух вершин параметр игнорируется.


    -smooth булевское

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


    -splinesteps число

    Задает желаемую степень гладкости кривой: каждый сплайн будет аппроксимирован числом прямолинейных отрезков. При опущенном параметре -spline параметр -splinesteps игнорируется.


    -stipple двуцвет

    Указывает на необходимость пунктирного изображения линии; двуцвет задает образец изображения в виде, воспринимаемом командой Tk_GetBitmap. Если значением параметра является пустая строка (как, например, по умолчанию), то линия изображается непрерывной кривой.


    -tags списокТегов

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


    -width ширинаЛинии
     

    Задает ширину линии в произвольном виде, описанном выше (см. ⌠Координаты⌠). Центр широкой линии проходит через вершины. По умолчанию параметр имеет значение ▒1.0▓.
    ОВАЛЫ  
    Элементы типа oval появляются на экране в виде овальных или круглых областей. Каждый овал может быть закрашенным и иметь контур. Овалы создаются командой примитива

    имяПути create oval x1 y1 x2 y2 параметр значение параметр значение ...

    Аргументы x1, y1, x2 и y2 задают координаты двух диагонально противоположных углов прямоугольника, заключающего овал. Овал включает в себя верхнюю и левую стороны прямоугольника, но не его нижнюю и правую сторону. Если прямоугольник представляет собой квадрат, то овал будет кругом, в противном случае он вытянут в одном из направлений. За координатами может следовать произвольный набор пар параметр-значение, каждая пара устанавливает значение одного из параметров. Такие же пары используются командами примитива itemconfigure для изменения конфигурации элемента. Команда поддерживает следующие параметры:


    -fill цвет

    Закрашивает цветом область, ограниченную овалом. Аргумент цвет может принимать любое значение, воспринимаемое командой Tk_GetColor. Если значением цвета является пустая строка, то закрашивания не происходит. Пустая строка также принимается значением параметра по умолчанию.


    -outline цвет

    Цвет задает цвет контура овала. Этот параметр может принимать любое значение, воспринимаемое командойTk_GetColor. По умолчанию параметр имеет значение black. Если в качестве параметра задана пустая строка, то контур овала не изображается.


    -stipple двуцвет

    Указывает на необходимость закрашивания внутренности овала в соответствии с образцом пунктира. Допустимы любые значения, воспринимаемые командой Tk_GetBitmap. Если параметр -fill не задан, то параметр -stipple не оказывает влияния на вывод. Если значением параметра -stipple является пустая строка (по умолчанию), то выполняется сплошное закрашивание.


    -tags списокТегов

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


    -width ширинаКонтура

    Задает ширину контура вокруг овала; значением параметра может быть любое допустимое значение координат, описанное выше (см. "Координаты"). Если параметр -outline не задан, то параметр -width не влияет на характер вывода. Широкий контур центрируется на овале, заданном координатами x1, y1, x2, y2. По умолчанию параметр имеет значение ⌠1.0■.
    МНОГОУГОЛЬНИКИ  
    Элементы типа polygon выводятся на экран в виде закрашенных многоугольных (возможно, криволинейных) областей. Многоугольники задаются командами примитива

    имяПути create polygon x1 y1 ... xn yn параметр значение параметр значение ...

    Аргументы с x1 до yn задают координаты не менее чем трех точек, определяющих замкнутый многоугольник. Первая и последняя точки могут совпадать; вне зависимости от того, так это или нет, Tk изображает замкнутый многоугольник. За координатами может следовать несколько пар параметр-значение, каждая из которых устанавливает один из параметров конфигурации элемента. Те же пары параметр-значение могут быть использованы в команде примитива itemconfigure для изменения конфигурации элемента. Команда поддерживает следующие параметры:

    -fill цвет

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


    -outline цвет

    Цвет задает цвет контура многоугольника. Этот параметр может принимать любое значение, воспринимаемое командой Tk_GetColor. Если в качестве значения параметра задана пустая строка (по умолчанию), то контур овала не изображается.


    -smooth булевское

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


    -splinesteps число

    Задает желаемую степень гладкости кривой: каждый сплайн будет аппроксимирован числом прямолинейных отрезков. При опущенном параметре -smooth параметр -splinesteps игнорируется.


    -stipple двуцвет

    Указывает на необходимость пунктирного закрашивания многоугольника; двуцвет задает образец изображения в виде, воспринимаемом командой Tk_GetBitmap. Если значением параметра является пустая строка (как, например, по умолчанию), то осуществляется непрерывное закрашивание.


    -tags списокТегов

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


    -width ширинаКонтура

    Задает ширину контура вокруг многоугольника в произвольном виде, описанном выше (см. ⌠Координаты⌠). Если параметр -outline не задан, то параметр -width игнорируется. По умолчанию параметр имеет значение ⌠1.0■. Многоугольные элементы отличаются от других ≈ прямоугольников, овалов и дуг ≈ в том отношении, что их внутренние точки считаются находящимися ⌠внутри■ многоугольника (например, в смысле команд примитива find closest и find overlapping), даже если он и не закрашен. Для большинства остальных типов элементов внутренние точки считаются находящимися внутри элемента, только если элемент закрашен или если он не закрашен и не имеет контура. Если Вам нужен незакрашенный многоугольник, внутренние точки которого не считаются находящимися внутри него, то пользуйтесь вместо этого элементом line.
    ПРЯМОУГОЛЬНИКИ  
    Элементы типа rectangle появляются на экране в виде прямоугольных областей. Каждый прямоугольник может быть закрашенным и иметь контур. Прямоугольники создаются командой примитива

    имяПути create rectanglex1 y1 x2 y2 параметр значение параметр значение ...

    Аргументы x1, y1, x2 и y2 задают координаты двух диагонально противоположных углов прямоугольника (верхняя и левая стороны прямоугольника входят в него, а нижняя и правая сторона ≈ нет). За координатами может следовать произвольный набор пар параметр-значение, каждая пара устанавливает значение одного из параметров. Такие же пары используются командами примитива itemconfigure для изменения конфигурации элемента. Команда поддерживает следующие параметры:


    -fill цвет

    Закрашивает цветом прямоугольную область. Аргумент цвет может принимать любое значение, воспринимаемое командой Tk_GetColor. Если значением цвета является пустая строка, то закрашивания не происходит. Пустая строка также принимается значением параметра по умолчанию.


    -outline цвет

    Цвет задает цвет контура прямоугольника. Этот параметр может принимать любое значение, воспринимаемое командой Tk_GetColor. По умолчанию параметр имеет значение black. Если в качестве параметра задана пустая строка, то контур прямоугольника не изображается.


    -stipple двуцвет

    Указывает на необходимость закрашивания прямоугольника в соответствии с образцом пунктира. Допустимы любые значения, воспринимаемые командой Tk_GetBitmap. Если параметр -fill не задан, то параметр -stipple не оказывает влияния на вывод. Если значением параметра -stipple является пустая строка (по умолчанию), то выполняется сплошное закрашивание.


    -tags списокТегов

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


    -width ширинаКонтура

    Задает ширину контура вокруг прямоугольника; значением параметра может быть любое допустимое значение координат, описанное выше (см. "Координаты"). Если параметр -outline не задан, то параметр -width не влияет на характер вывода. Широкий контур центрируется на прямоугольнике, заданном координатами x1, y1, x2, y2. По умолчанию параметр имеет значение ⌠1.0■.
     
    ТЕКСТОВЫЕ ЭЛЕМЕНТЫ
      Текстовый элемент предназначен для вывода на экран строки символов в одну или несколько строчек. Текстовые элементы поддерживают индексы и выделение, и на них могут быть выполнены команды примитива канвы dchars, focus, icursor, index, insert, select. Текстовые элементы создаются командой примитива

    имяПути create text x y параметр значение параметр значение ...

    Аргументы x и y задают координаты точки, используемой для размещения текста на экране (подробнее размещение текста описано ниже при описании параметров). За координатами могут следовать несколько пар параметр-значение, каждая из которых устанавливает значение одного из параметров конфигурации элемента. Такие же пары используются командами примитива itemconfigure для изменения конфигурации элемента. Команда поддерживает следующие параметры:


    -anchor положениеОпоры

    ПоложениеОпоры указывает способ размещения текста по отношению к его опорной точке. Параметр может принимать произвольное значение, воспринимаемое командой Tk_GetAnchor. Так, если параметр имеет значение center, то в опорной точке располагается центр текста; значение n указывает что в опорной точке располагается верхняя центральная точка текста и т.д. По умолчанию параметр имеет значение center.


    -fill цвет

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


    -font имяШрифта

    Задает шрифт текста в элементе. ИмяШрифта может быть произвольной строкой, воспринимаемой командой Tk_GetFontStruct. Если параметр не задан, то его значением по умолчанию является системно-зависимый шрифт.


    -justify как

    Задает способ выравнивания текста внутри области текста. Аргумент как может принимать одно из значений left, right или center. Параметр оказывает влияние на размещение текста, только если выводится несколько строчек. По умолчанию параметр имеет значение left.


    -stipple двуцвет

    Указывает на необходимость вывода текста в соответствии с образцом пунктира. Допустимы любые значения, воспринимаемые командой Tk_GetBitmap. Если значением параметра -stipple является пустая строка (по умолчанию), то текст выводится сплошной линией.


    -tags списокТегов

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


    -width длинаСтрочки

    Задает максимальную длину строчки текста; значением параметра может быть любое допустимое значение координат, описанное выше (см. "Координаты"). Если значение параметра равно нулю (по умолчанию), то перенос строки происходит только при появлении в тексте символа новой строчки. Если, однако, значение параметра не равно нулю, то концом строчки, длина которой превосходит длинуСтрочки, считается символ пробела с номером, ближайшим (с недостатком) к длинеСтрочки. Этот символ пробела рассматривается как символ перехода на новую строчку.
    ОКНА  
    Элементы типа window предназначены для вывода окна в указанное положение на канве. Окна создаются командой

    имяПути create window x y параметр значение параметр значение ...

    Аргументы x и y задают координаты точки, используемой для размещения окна на экране (подробнее размещение текста описано ниже при описании параметра -anchor). За координатами могут следовать несколько пар параметр-значение, каждая из которых устанавливает значение одного из параметров конфигурации элемента. Такие же наборы параметр-значение используются для изменения значений параметров с помощью команды примитива itemconfigure. Окна поддерживают следующие параметры:

    -anchor положениеОпоры

    ПоложениеОпоры указывает способ размещения окна по отношению к опорной точке элемента. Параметр может принимать произвольное значение, воспринимаемое командой Tk_GetAnchor. Так, если параметр имеет значение center, то в опорной точке располагается центр текста; значение ⌠n■ указывает что в опорной точке располагается верхняя центральная точка текста и т.д. По умолчанию параметр имеет значение center.


    -height пиксели

    Задает высоту окна элемента. Аргумент пиксели может иметь вид, описанный выше (см. ⌠Координаты⌠). Если параметр не задан или если его значением является пустая строка, то высота окна определяется его содержимым.


    -tags списокТегов

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


    -width пиксели

    Задает ширину окна элемента. Аргумент пиксели может иметь вид, описанный выше (см. ⌠Координаты⌠). Если параметр не задан или если его значением является пустая строка, то ширина окна определяется его содержимым.


    -window имяПути

    Приписывает данному элементу окно. Окно, заданное аргументом имяПути, должно быть либо потомком примитива канвы, либо потомком одного из наследников примитива канвы. ИмяПути может и не указывать окно верхнего уровня.
    Замечание. Ограничения на управление окнами не позволяют выводить графические элементы (такие, как кривые и двуцветные изображения) поверх окон.
    ТИПЫ ЭЛЕМЕНТОВ, ОПРЕДЕЛЯЕМЫЕ В ПРИЛОЖЕНИЯХ  
    В конкретных приложениях можно определять новые типы элементов для примитивов канвы с помощью C кода. Описание этой возможности приведено в документации для Tk_CreateItem.
    ПРЕДПОЧТЕНИЯ  
    В текущей реализации новая канва не имеет никакого поведения по умолчанию; для определения этого поведения необходимо явно выполнить команды Tcl.
    checkbutton


    Создание примитива защелкивающейся кнопки и управление им.
     
  • Синтаксис
  • Стандартные параметры
  • Дополнительные параметры примитива
  • Описание
  • Команда примитива
  • Предпочтения
  • СИНТАКСИС  
    checkbutton имяПути  параметры
     
    СТАНДАРТНЫЕ ПАРАМЕ ТРЫ
       
    -activebackground -cursor -highlightthickness
    -takefocus -activeforeground -disabledforeground
    -image -text anchor
    -font -justify -textvariable
    -background -foreground padx
    -underline -bitmap -highlightbackground
    -pady -wraplength -borderwidth
    -highlightcolor -relief  
    Подробное описание этих параметров приведено в разделе options.
     
    ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА   Имя параметра: -command
    Имя в Базе: command
    Класс в Базе: Command


    Ассоциирует с кнопкой команду Tk. Обычно команда выполняется при отпускании клавиши 1 ⌠Мыши■ на кнопке. Перед выполнением этой команды обновляется значение глобальной переменной (параметр -variable).
     

    Имя параметра: -height
    Имя в Базе: height
    Класс в Базе: Height


    Задает желаемую высоту кнопки. Если в кнопке выводится изображение или двуцветное изображение, то значение параметра задается в пикселях (т.е., в любом виде, приемлемом для Tk_GetPixels); высота текстовой кнопки задается числом строчек текста. Если параметр не задан, то высота кнопки вычисляется по ее содержимому.
     

    Имя параметра: -indicatoron
    Имя в Базе: indicatorOn
    Класс в Базе: IndicatorOn


    Указывает, следует ли выводить индикатор. Значение параметра должно быть булевским. Если значением является ⌠ложь■, то параметр relief игнорируется и примитив всегда изображается вдавленным, если он выделен, и выпуклым в противном случае.
     

    Имя параметра: -offvalue
    Имя в Базе: offValue
    Класс в Базе: OffValue


    Задает значение, которое нужно сохранять в переменной кнопки всякий раз при прекращении выделения кнопки. По умолчанию сохраняемое значение равно ⌠0■.
     

    Имя параметра: -onvalue
    Имя в Базе: onValue
    Класс в Базе: OnValue


    Задает значение, которое нужно сохранять в переменной кнопки всякий раз при выделении кнопки. По умолчанию сохраняемое значение равно ⌠1■.
     

    Имя параметра: -selectcolor
    Имя в Базе: selectColor
    Класс в Базе: SelectColor
    Задает цвет фона для изображения выделенной кнопки. Если параметр IndicatorOn имеет значение истина, то указанный цвет применяется для изображения индикатора. В системе Windows тот же цвет используется в качестве фона изображения индикатора вне зависимости от состояния выделения. Если значением параметра IndicatorOn является ложь, то указанный цвет используется в качестве фона для всего примитива, когда он выделен, вместо значений параметров background и activeBackground.
      Имя параметра: -selectimage
    Имя в Базе: selectImage
    Класс в Базе: SelectImage


    Задает изображение, выводимое в кнопке при выделении кнопки проверки (вместо изображения, заданного параметром -image). Если параметр -image отсутствует, то значение параметра -selectimage игнорируется.
     

    Имя параметра: -state
    Имя в Базе: state
    Класс в Базе: State


    Задает одно из трех состояний защелкивающейся кнопки: normal, active или disabled. В нормальном состоянии защелкивающаяся кнопка изображается с использованием значений параметров foreground и background. В активном состоянии защелкивающаяся кнопка обычно находится, если на ней расположен курсор. Защелкивающаяся кнопка в активном состоянии изображается с использованием значений параметров activeForeground и activeBackground. Отключенное состояние указывает на то, что кнопка должна быть нечувствительной: привязки по умолчанию не приводят к запуску примитива и нажатия на кнопку ⌠Мыши■ игнорируются. В этом состоянии изображение кнопки определяется значениями параметров disabledForeground и background.
     

    Имя параметра: -variable
    Имя в Базе: variable
    Класс в Базе: Variable
    Задает имя глобальной переменной, в которой хранится информация о том, выделена или нет данная кнопка. По умолчанию совпадает с именем кнопки (т.е. с последним элементом имени пути окна кнопки).
      Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width


    Задает желаемую ширину кнопки. Если в кнопке выводится изображение или двуцветное изображение, то значение параметра задается в пикселях (т.е., в любом виде, приемлемом для Tk_GetPixels); ширина текстовой кнопки задается числом символов. Если параметр не задан, то ширина кнопки вычисляется по ее содержимому.
     

    ОПИСАНИЕ  
    Команда checkbutton создает новое окно (задаваемое аргументом имяПути) и превращает его в примитив защелкивающейся кнопки. Детали изображения защелкивающейся кнопки, такие как ее цвета, шрифт, текст и объемный вид задаются с помощью описанных выше дополнительных параметров. Команда button возвращает аргумент имяПути. В момент выполнения этой команды не должно существовать окна с именем имяПути, но должен существовать его предок.

    Защелкивающаяся кнопка представляет собой примитив, в котором выводится текстовая строка, изображение или двуцветное изображение, а также квадратик, называемый индикатором. Весь выводимый текст должен быть записан одним шрифтом, однако он может занимать несколько строчек на экране (если в нем есть символы перевода строки или задан параметр wrapLength). Один из символов текста может быть подчеркнут (в соответствии со значением параметра underline). Защелкивающаяся кнопка обладает всеми характеристиками обычной кнопки, включая следующие: в зависимости от значения параметра button кнопка имеет три разных вида; кнопка может выглядеть выпуклой, вдавленной или плоской, кроме того, она может мигать. При инициации защелкивающейся кнопки (нажатием на клавишу 1 ⌠Мыши■, когда курсор ⌠Мыши■ находится на кнопке) выполняется команда Tcl, указанная в параметре -command.

    Кроме того, защелкивающиеся кнопки можно выделять. Если защелкивающаяся кнопка выделена, то индикатор обычно изображается как выделенный, а переменная Tcl, ассоциированная с данной кнопкой, имеет предписанное значение (обычно ⌠1■). В ОС Unix индикатор изображается вдавленным и имеет специальный цвет. В системе Windows вместо этого в индикаторе стоит галочка. Если защелкивающаяся кнопка не выделена, то индикатор имеет невыделенный вид, а ассоциированная переменная имеет другое значение (обычно 0). В ОС Unix такой индикатор изображается выпуклым и не имеет специального цвета. В системе Windows в невыделенном индикаторе отсутствует галочка. По умолчанию имя переменной, ассоциированной с защелкивающейся кнопкой, совпадает с именем, использующимся при создании самой кнопки. Имя переменной и записываемые в ней значения ⌠выделенная■/■невыделенная■ можно поменять с помощью параметров командной строки или в базе данных параметров. С помощью параметров конфигурации можно также поменять вид индикатора (или даже отменить саму необходимость его вывода). По умолчанию выделение защелкивающейся кнопки меняется при последовательных щелчках кнопки. Кроме того, каждая защелкивающаяся кнопка отслеживает значение своей глобальной переменной и изменяет свое состояние всякий раз при перемене этого значения с ⌠выделенная■ на ■невыделенная■ и обратно.
     

    КОМАНДА ПРИМИТИВА  
    Команда checkbutton создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид:

    имяПути параметр арг арг ...

    Параметр и аргументы уточняют поведение команды. Примитивы защелкивающейся кнопки допускают следующие формы команды: имяПути cget параметр Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды checkbutton. имяПути configure параметр значение параметр значение ... Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды checkbutton. имяПути deselect
      Отменяет выделение защелкивающейся кнопки и устанавливает значение ⌠невыделена■ ассоциированной переменной.


    имяПути flash

    Заставляет защелкивающуюся кнопку мигать. Этот эффект достигается путем многократного вывода изображения кнопки поочередно в активном и нормальном состоянии. По окончании работы команды защелкивающаяся кнопка остается в том же состоянии (активном или нормальном), что и перед началом ее выполнения. Если перед началом выполнения команды защелкивающаяся кнопка находится в состоянии disabled, то команда игнорируется. имяПути invoke Приводит в точности к тому же результату, что и нажатие клавиши ⌠Мыши■ на защелкивающейся кнопке: кнопка становится выделенной и выполняется команда Tcl, ассоциированная с кнопкой (при наличии такой команды). Возвращаемое значение совпадает с возвращаемым значением команды Tcl (или является пустой строкой, если с защелкивающейся кнопкой никакой команды не ассоциировано). Если перед началом выполнения команды защелкивающаяся кнопка находится в состоянии disabled, то команда игнорируется. имяПути toggle Выделяет кнопку, перерисовывая ее в новом состоянии и изменяя значение ассоциированной переменной.
    ПРЕДПОЧТЕНИЯ  
    При создании защелкивающейся кнопки Tk, в соответствии с типом кнопки, автоматически формирует параметры, определяющие ее поведение по умолчанию:

    В ОС Unix кнопка становится активной при появлении над ней курсора ⌠Мыши■ и дезактивируется, когда курсор ее покидает. В системах Mac и Windows при нажатии клавиши 1 ⌠Мыши■ на защелкивающейся кнопке кнопка активизируется, когда курсор ⌠Мыши■ находится на кнопке и становится неактивной, когда курсор ее покидает.

    При нажатии клавиши 1 ⌠Мыши■ на защелкивающейся кнопке кнопка становится выделенной и выполняется команда, привязанная к ней.

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

    В системе Windows имеются дополнительные привязки клавиш: плюс (▒+▓) и знак равенства (▒=▓) выделяют кнопку, а минус (▒-▓) отменяет выделение.

    Если защелкивающаяся кнопка находится в состоянии disabled, то все описанные выше действия не приводят ни к какому результату: кнопка остается неактивной.

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


    clipboard


    Управление буфером временного хранения Tk.
    СИНТАКСИС
      clipboard параметр ?арг арг ...?
     
    ОПИСАНИЕ Команда обеспечивает Tcl интерфейс с буфером временного хранения Tk, в котором хранятся данные для последующего использования с помощью механизма выделения. Для копирования данных в буфер необходимо вызвать очистку буфера, а затем одну или несколько команд добавления данных в буфер. Полное обновление буфера достигается, если все добавления произведены до завершения события.   Первый аргумент определяет формат последующих аргументов и поведение команды. В настоящее время поддерживаются следующие формы команды:

    clipboard clear?-displayof окно?

    Заявляет права на буфер в окне и удаляет текущее содержимое буфера. Значением параметра окно по умолчанию является ▒.▓. Команда возвращает пустую строку. clipboard append?-displayof окно? ?-format формат? ?-type тип? ?--? данные Добавляет данные к содержимому буфера окна в виде, заданном параметром тип, и представлении, заданном параметром формат, а также заявляет права на буфер в окне.

    Параметр тип задает вид, в котором должно возвращаться выделение; его значение должно быть именем атома, например, STRING или FILE_NAME; детали описания см. в (1). Параметр тип по умолчанию имеет значение STRING.

    Аргумент формат задает представление, в котором выделение передается по запросу (см (1). второй столбец в Таблице 2); по умолчанию его значение STRING. В формате STRING выделение передается в виде строки 8-битовых символов ASCII. В формате ATOM данные разделяются на поля, отделенные друг от друга пробелами; каждое поле преобразуется в значение своего атома, а вместо имени атома передается его 32-битовое значение. Во всех других форматах данные делятся на поля, отделенные друг от друга пробелами, каждое поле преобразуется в 32-битовое целое число; затем массив целых чисел передается тому, кто запросил выделение. При этом передаваемые в буфер строки конкатенируются перед преобразованием, поэтому необходимо позаботиться заранее о соответствующем обрамлении их пробелами. Все добавки в буфер одного типа должны иметь одинаковый формат.

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

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

    destroy
    Команда удаляет окна. СИНТАКСИС  
    destroy?window window ┘?
    ОПИСАНИЕ  
    Команда удаляет одно или несколько заданных аргументами window окон и всех их потомков. Окна удаляются в порядке перечисления, и если при удалении очередного окна произойдет ошибка, то команда прекращает работу без удаления оставшихся окон. Если удалить окно ⌠.⌠, то будет разрушено все приложение.
     
    entry
    Создание примитива поля ввода текста и управление им.
     
  • Синтаксис
  • Стандартные параметры
  • Дополнительные параметры примитива
  • Описание
  • Команда примитива
  • Привязки по умолчанию
  • СИНТАКСИС  
    entry имяПути параметры
    СТАНДАРТНЫЕ ПАРАМЕТРЫ
     
     
    -background -highlightbackground  -insertontime
    -selectforeground -borderwidth -highlightcolor
    -insertwidth -takefocus -cursor
    -highlightthickness -justify -textvariable
    -exportselection -insertbackground -relief
    -xscrollcommand -font -inserborderwidth
    -selectbackground -foreground -insertofftime
    -selectborderwidth    
    Подробное описание этих параметров приведено в options. ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА Имя параметра: -show
    Имя в Базе: show
    Класс в Базе: Show Если этот параметр задан, то истинное содержимое поля не выводится на экране. Вместо этого каждый символ текста заменяется первым символом значения параметра -show, скажем ▒*▓. Такая возможность полезна, например, при вводе в поле пароля. Если символы поля ввода были выделены и скопированы в другом месте, то выводиться будет скопированная информация, а не истинное содержимое поля ввода. Имя параметра: -state
    Имя в Базе: state
    Класс в Базе: State Задает одно из двух состояний поля ввода: normal или disabled. Отключенное состояние указывает на то, что значение поля ввода нельзя изменить с помощью команд примитива. При этом курсор ввода в поле не отображается, даже если этот примитив оказался в фокусе ввода.
    Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width Задает желаемую ширину окна поля ввода в виде целого числа. Если введенное значение неположительно, то ширина поля устанавливается такой, чтобы в него в точности помещался текст его текущего значения.
    ОПИСАНИЕ Команда entry создает новое окно (задаваемое аргументом имяПути) и превращает его в примитив поля ввода. Детали изображения кнопки, такие как ее цвета, шрифт и объемный вид, задаются с помощью описанных выше дополнительных параметров. Команда entry возвращает аргумент имяПути. В момент выполнения этой команды не должно существовать окна с именем имяПути, но должно существовать его родительское окно.

    Поле ввода представляет собой примитив, предназначенный для вывода одной строки текста и редактирования ее с помощью описываемых ниже команд примитива, которые по большей части сводятся к нажатию клавиш на клавиатуре и действиям с ⌠Мышью■. При создании поля ввода его строка текста пуста. Часть содержимого поля можно выделить, совершив действия, описываемые ниже. Экспорт выделенного текста (см. описание параметра exportSelection) осуществляется по стандартному протоколу X11 для выделений; выделения в поле ввода имеют тип STRING. Поля ввода также подчиняются стандартным правилам Tk обращения с фокусом ввода. Когда поле ввода находится в фокусе ввода, в нем изображается курсор ввода, который указывает, где будут вставляться вводимые символы.

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

    КОМАНДА ПРИМИТИВА Команда entry создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

    имяПути параметр арг арг ...

    Параметр и аргументы уточняют поведение команды.

    Аргументами многих команд примитива поля ввода служат индексы. Индекс задает положение конкретного символа в строке поля ввода. Он может иметь один из следующих видов:

    число
     

    Задает номер символа в строке. Первый символ строки имеет номер ▒0▓.


    anchor

    Задает опорную точку выделения, которая используется командами примитива select from и select adjust. end Указывает положение символа непосредственно после последнего символа строки в поле ввода. Указание этого индекса равносильно указанию длины строки. insert

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

    sel.first

    Указывает на первый из выделенных символов. Эта форма индекса недопустима, если выделение не расположено в окне поля ввода. sel.last Указывает на последний из выделенных символов. Эта форма индекса недопустима, если выделение не расположено в окне поля ввода. @число В этом случае число трактуется как x-координата в окне поля ввода; указывает на символ с этой x-координатой. Например, ⌠@0■ указывает на самый левый символ в окне ввода. Вместо любой из указанных форм можно использовать ее сокращение, например, ⌠e■ или ⌠sel.f■. Как правило, значения индексов, выходящие за пределы допустимых, заменяются ближайшими допустимыми значениями.

    Примитивы поля ввода допускают следующие команды:

    имяПути bbox индекс

    Возвращает список из четырех элементов, описывающий клетку, занимаемую символом, указанным параметром индекс. Первые два элемента списка задают x- и y-координаты верхнего левого угла клетки (в пикселях по отношению к примитиву), последние два элемента ≈ ширину и высоту символа (в пикселях). Клетка может находиться за пределами видимой части окна. имяПути cget параметр Возвращает текущее значение параметра конфигурации с именем параметр. Параметрможет быть любым из параметров команды entry. имяПути configure параметр значение параметр значение ... Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения. В этом случае команда возвращает пустую строку. Параметр может быть любым из параметров команды entry. имяПути delete первый последний Удаляет один или несколько символов в поле ввода. Аргумент первый является индексом первого удаляемого символа, а аргумент последний представляет собой индекс символа, следующего непосредственно за последним удаляемым символом. По умолчанию значение аргумента последний на единицу больше значения аргумента первый, т.е. удаляется один символ. Команда возвращает пустую строку. имяПути get Возвращает строку ≈ содержимое поля ввода. имяПути icursor индекс Устанавливает курсор ввода непосредственно перед символом, заданным аргументом индекс. Возвращает пустую строку. имяПути index индекс Команда возвращает числовое значение индекса, заданного аргументом индекс. имяПути insert индекс строка Вставляет символы строки непосредственно перед символом, на который указывает аргумент индекс. Команда возвращает пустую строку. имяПути scan параметр аргументы Осуществляет сканирование поля ввода. В зависимости от значения параметра может иметь две различные формы:

    имяПути scan mark x

    Запоминает значение координаты x и текущее состояние окна поля ввода; используется в сочетании с последующими командами scan dragto. Обычно эта команда связана с нажатием клавиши ⌠Мыши■ на примитиве. Возвращает пустую строку. имяПути scan dragto x Вычисляет разность между значением своего аргумента x и значением аргумента x последней выполненной на данном примитиве команды scan mark. Затем переносит изображение примитива на расстояние, в 10 раз превышающее вычисленную разность. Команда обычно связана с событиями движения ⌠Мыши■ в примитиве и используется для скоростного перетаскивания поля ввода в окне. Возвращает пустую строку.
    имяПути selection параметр аргумент Производит размещение выделения в поле ввода. Команда может иметь одну из описанных ниже форм. имяПути selection adjust индекс Определяет ближайший к указанному аргументом индекс положению край выделения и устанавливает новое значение этого края в индекс (т.е. элемент с индексом индекс входит в выделение, а соседний с ним ≈ нет). Противоположный край выделения становится опорной точкой для последующих команд select to. Если в текущий момент выделение в поле отсутствует, то команда заводит новое выделение, содержащее символы между указанным аргументом индекс и последней установленной опорной точкой выделения. Возвращает пустую строку. имяПути selection clear Очищает выделение в данном примитиве. Если выделение отсутствует, то не производит никаких действий. Возвращает пустую строку. имяПути selection from индекс Устанавливает опорную точку выделения непосредственно перед символом, заданным аргументом индекс. Текущего выделения команда не меняет. Возвращает пустую строку. имяПути selection present Возвращает ⌠1■, если в поле ввода имеется выделение, в противном случае возвращает ⌠0■. имяПути selection range начало конец Выделяет символы между символом, указанным аргументом начало, и символом, непосредственно предшествующим указанному аргументом конец. Если символ, указанный аргументом конец, совпадает с символом, указанным аргументом начало, или предшествует ему, то выделение становится пустым. имяПутиselection to индекс Если символ, указанный аргументом индекс, предшествует опорной точке выделения, то команда выделяет все символы между опорным символом выделения и символом, указанным аргументом индекс, не включая опорный символ. Если аргумент индекс указывает на опорный символ, то команда ничего не делает. Если символ, указанный аргументом индекс, следует за опорной точкой выделения, то команда выделяет все символы между опорным символом выделения и символом, указанным аргументом индекс, не включая этот символ. Опорный символ устанавливается последней выполненной на данном примитиве командой select from или select adjust. Если в текущий момент выделение в поле отсутствует, то команда заводит новое выделение, содержащее символы между указанным аргументом индекс и последней установленной опорной точкой выделения. Команда возвращает пустую строку. имяПути xview аргументы Используется для запроса горизонтального положения информации, выведенной в поле ввода, и изменения этого положения. Команда может иметь одну из следующих форм:

    имяПути xview

    Возвращает список, состоящий из двух элементов. Каждый из элементов списка представляет собой вещественное число, заключенное между нулем и единицей; эта пара чисел описывает видимый в окне горизонтальный интервал. Так, например, если первое число равно ⌠.2■, а второе ⌠.6■, то 20% текста в поле ввода оказывается невидимой слева от окна, в окне выводится 40% информации, и еще 40% оказывается невидимой справа от окна. Те же значения передаются полосе прокрутки через параметр -xscrollcommand. имяПути xview индекс Переносит строку в поле ввода так, что самым левым символом в окне становится символ, указанный аргументом индекс. имяПути xview moveto число Передвигает область видимости так, что слева от окна остается невидимой часть поля ввода, указанная аргументом число. Число должно быть заключено между ▒0▓ и ⌠1■. имяПути xview scroll количество что Сдвигает выводимый в окне текст вправо или влево в соответствии со значениями аргументов. Количество должно быть целым числом, аргумент что может принимать значения units или pages или быть сокращением одного из этих слов. Если аргумент что принимает значение units, то сдвиг происходит на количество символов средней ширины. Если значением аргумента что является pages, то сдвиг осуществляется на количество полных экранов. Если количество отрицательно, то видимые символы сдвигаются вправо, в противном случае ≈ влево.
    ПРИВЯЗКИ ПО УМОЛЧАНИЮ При создании поля ввода Tk автоматически создает привязки класса, определяющие поведение примитива по умолчанию. В приводимом ниже описании ⌠слово■ есть произвольная непрерывная группа букв, цифр и символов ⌠_■ или любой другой одиночный символ.

    Щелчок клавишей 1 ⌠Мыши■ устанавливает курсор ввода непосредственно перед символом, расположенным под курсором ⌠Мыши■, устанавливает фокус ввода на данном примитиве и отменяет выделение в нем.

    Перетаскивание курсора ⌠Мыши■ приводит к выделению символов между курсором ввода и конечным положением курсора ⌠Мыши■.

    Двойной щелчок клавишей 1 ⌠Мыши■ приводит к выделению слова под курсором ⌠Мыши■ и устанавливает курсор ввода перед первым символом этого слова. Перетаскивание ⌠Мыши■ после двойного щелчка приводит к выделению группы, состоящей из целых слов.

    Тройной щелчок клавишей 1 ⌠Мыши■ приводит к выделению всего текста в поле ввода и устанавливает курсор ввода перед первым символом текста.

    Края выделения можно выровнять, если тащить ⌠Мышь■ с нажатой клавишей 1 при нажатой клавише Shift; в этом случае выравнивается край, ближайший к положению курсора ⌠Мыши■ в момент нажатия ее клавиши 1. Если по кнопке щелкнули дважды перед тем, как тащить ⌠Мышь■, то выделение выравнивается относительно концов полных слов.

    Щелчок по клавише 1 ⌠Мыши■ при нажатой клавише Control приводит к установке курсора ввода в поле ввода без изменения текущего выделения.

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

    Содержимое поле ввода можно перемещать с помощью клавиши 2 ⌠Мыши■. Щелчок по клавише 2 ⌠Мыши■ и без ее перемещения приводит к копированию выделения в поле ввода в место расположения курсора ⌠Мыши■.

    Если тащить ⌠Мышь■ слева или справа от окна поля ввода по направлению от окна при нажатой клавише 1, то в окне автоматически появляется невидимый ранее текст (если в поле со стороны, где ⌠Мышь■ покинула окно, есть текст, невидимый в окне).

    Нажатие на клавиши Left или Right приводит к перемещению курсора ввода на один символ влево или вправо; при этом текущее выделение отменяется и устанавливается новая опорная точка выделения. Если нажатие на клавиши Left или Right происходит при нажатой клавише Shift, то курсор ввода перемещается и пройденный им символ добавляется к выделению. Нажатие на клавиши Control-Left и Control-Right приводит к перемещению курсора ввода на полное слово, сочетания Control-Shift-Left и Control-Shift-Right еще и расширяют выделение. Сочетания Control-b и Control-f играют ту же роль, что и Left и Right, а сочетания Meta-b и Meta-f соответственно ту же роль, что и Control-Shift-Left и Control-Shift-Right.

    Нажатие на клавишу Home (или Control-a) приводит к перемещению курсора к началу текста с отменой существующих выделений. Shift-Home перемещает курсор к началу текста и доводит до этого места выделение.

    Нажатие на клавишу End (или Control-e) приводит к перемещению курсора в конец текста с отменой существующих выделений. Shift-End перемещает курсор в конец текста и доводит до этого места выделение.

    Нажатие на клавишу Select (или Control-Space) устанавливает опорную точку выделения в положение курсора ввода. Текущее выделение при этом не изменяется. Нажатие на клавиши Shift-Select (или Control-Shift-Space) доводит выделение до текущего положения курсора ввода (или устанавливает выделение между опорной точкой выделения и текущим положением курсора ввода, если текущее выделение отсутствовало).

    Control-/ выделяет весь текст в окне.

    Control-\ приводит к отмене текущего выделения.

    Клавиша F16, на многих станциях Sun обозначенная Copy, (или Meta-w) копирует выделение в примитиве в карман.

    Клавиша F20, на многих станциях Sun обозначенная Cut, (или Control-w) копирует выделение в примитиве в карман и удаляет выделение. Если выделение в примитиве отсутствует, то нажатие на эти клавиши не приводит ни к каким действиям.

    Клавиша F18, на многих станциях Sun обозначенная Paste, (или Control-y) копирует содержимое кармана в место расположения курсора ввода.

    Нажатие на клавишу Delete приводит к удалению выделения. Если выделение отсутствует, то удаляется символ, непосредственно примыкающий к курсору ввода справа.

    Нажатие на клавишу BackSpace (или Control-h) приводит к удалению выделения. Если выделение отсутствует, то удаляется символ, непосредственно примыкающий к курсору ввода слева.

    Control-d удаляет символ, непосредственно примыкающий к курсору ввода справа.

    Meta-d удаляет слово, непосредственно примыкающее к курсору ввода справа.

    Control-k удаляет все символы справа от курсора ввода.

    Если поле ввода отключено указанием значения disabled параметра -state, то в окне поля по-прежнему можно перемещать текст и производить выделение, однако курсор ввода в окне не появляется и редактирование текста невозможно.

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

    event


    Определение виртуальных событий и генерация событий
     
     
  • Синтаксис
  • Описание
  • Поля события
  • Примеры виртуальных событий
  •  
    СИНТАКСИС event параметр ?арг арг ...? ОПИСАНИЕ
      Команда event обеспечивает различные возможности работы с событиями, включая определение виртуальных событий и синтезирование событий. У команды есть несколько различных форм, которые задаются первым аргументом. В настоящее время поддерживаются следующие формы команды:

    event add <<виртуальное>> последовательность ?последовательность...?

    Связывает виртуальное событие с последовательностями физических событий, указываемыми аргументами последовательность; в результате выполнение одной из указанных последовательностей событий приводит к возникновению виртуального события. Аргумент виртуальное может быть произвольной строкой, а последовательность может принимать любое значение, допустимое для аргумента последовательность команды bind. Если виртуальное событие уже определено, то новая последовательность физических событий добавляется к списку уже имеющихся последовательностей. event delete <<виртуальное>> последовательность ?последовательность...? Удаляет все указанные последовательности из списка связанных с данным виртуальным событием. Аргумент виртуальное может быть произвольной строкой, а последовательность может принимать любое значение, допустимое для аргумента последовательность команды bind. Если последовательность не связана с данным виртуальным событием в текущий момент, то она игнорируется. Если аргумент последовательность отсутствует, то из списка удаляются все последовательности физических событий и данное виртуальное событие не может быть более осуществлено. event generateокно событие ?параметр значение параметр значение ...? Генерирует событие в окне и обеспечивает его обработку таким образом, как если бы оно поступило из менеджера окон. Аргумент окно задает имя пути окна, в котором будет генерироваться событие; его значением может быть и идентификатор окна (такой же, какой служит результатом команды winfo id), если он относится к окну в текущем приложении. Аргумент событие задает описание события, например, в виде <Shift-Button-2> или <<Paste>>. Аргумент событие может принимать любое значение, допустимое для аргумента последовательность команды bind, за исключением того, что он должен состоять из одного, а не из нескольких событий. Пары параметр-значение можно использовать для установки значений дополнительных параметров события, например, координат курсора ⌠Мыши■ ниже (см. "ПОЛЯ  СОБЫТИЯ"). Если параметр -when не задан, то событие обрабатывается немедленно; все программы обработки события будут выполнены до завершения команды event generate. В противном случае момент обработки определяется значением параметра -when. event info ?<<виртуальное>>? Возвращает информацию о виртуальных событиях. Если аргумент <<виртуальное>> опущен, то возвращается список всех виртуальных событий, определенных в текущий момент. Если аргумент <<виртуальное>> задан, то возвращаемое значение представляет собой список, элементы которого являются последовательностями физических событий, связанными с данным виртуальным событием; если указанное виртуальное событие не определено, то команда возвращает пустую строку.
    ПОЛЯ СОБЫТИЯ  Команда event generate поддерживает следующие параметры, которые соответствуют расширению ⌠%■ в скриптах привязки для команды bind.

    -above окно

    Аргумент окно задает поле above для события либо в виде имени пути окна либо в виде целочисленного идентификатора окна. Параметр имеет смысл для событий Configure. Параметр соответствует подстановке %a для скриптов привязки. -borderwidth размер Параметр размер представляет собой расстояние на экране; задает значение поля border_width события. Параметр имеет смысл для событий Configure. Параметр соответствует подстановке %B для скриптов привязки. -button число Значением параметра число должно быть целое число; задает значение поля detail для события ButtonPress или ButtonRelease, подавляя номер кнопки, задаваемый параметром события base. Параметр соответствует подстановке %b для скриптов привязки. -count число Значением параметра число должно быть целое число; задает значение поля count для события. Параметр имеет смысл для событий Expose. Параметр соответствует подстановке %c для скриптов привязки. -detail детальность Параметр задает значение поля detail для события и может принимать следующие значения:  
    NotifyAncestor NotifyNonlinearVirtual
    NotifyDetailNone NotifyPointer
    NotifyInferior NotifyPointerRoot
    NotifyNonlinear NotifyVirtual
    Имеет смысл для событий Enter, Leave, FocusIn и FocusOut. Параметр соответствует подстановке %d для скриптов привязки. -focus булевское Параметр булевское принимает булевские значения; он задает значение поля focus для события. Имеет смысл для событий Enter и Leave. Параметр соответствует подстановке %f для скриптов привязки. -height размер Параметр размер представляет собой расстояние на экране; задает значение поля height события. Параметр имеет смысл для событий Configure. Параметр соответствует подстановке %h для скриптов привязки. -keycode число Значением параметра число должно быть целое число; задает значение поля keycode для события. Параметр имеет смысл для событий KeyPress и KeyRelease. Параметр соответствует подстановке %k для скриптов привязки. -keysym имя Значением параметра имя должно быть имя допустимого символа клавиатуры, например, g, пробел или Return; код этого символа используется в качестве значения поля keycode события, подавляя значение детальности, заданное аргументом base события. Имеет смысл для событий KeyPress and KeyRelease. Параметр соответствует подстановке %K для скриптов привязки. -modeобъяв Параметр объяв задает значение поля mode для события; он должен принимать одно из значений NotifyNormal, NotifyGrab, NotifyUngrab или NotifyWhileGrabbed. Имеет смысл для событий Enter, Leave, FocusIn и FocusOut. Параметр соответствует подстановке %m для скриптов привязки. -overrideбулевское Значение параметра булевское должно быть булевским; он задает значение поля override_redirect для события. Имеет смысл для событий Map, Reparent и Configure. Параметр соответствует подстановке %o для скриптов привязки. -placeгде Параметр где задает значение поля place для события; может принимать значения PlaceOnTop или PlaceOnBottom. Имеет смысл для событий Circulate. Параметр соответствует подстановке %p для скриптов привязки. -rootокно Аргумент окно задает поле root для события либо в виде имени пути окна, либо в виде целочисленного идентификатора окна. Имеет смысл для событий KeyPress, KeyRelease, ButtonPress, ButtonRelease, Enter, Leave и Motion. Параметр соответствует подстановке %R для скриптов привязки. -rootx коорд Параметр коорд представляет собой расстояние на экране; задает значение поля x_root события. Параметр имеет смысл для событий KeyPress, KeyRelease, ButtonPress, ButtonRelease, Enter, Leave и Motion. Параметр соответствует подстановке %X для скриптов привязки. -rooty коорд Параметр коорд представляет собой расстояние на экране; задает значение поля y_root события. Параметр имеет смысл для событий KeyPress, KeyRelease, ButtonPress, ButtonRelease, Enter, Leave и Motion. Параметр соответствует подстановке %Y для скриптов привязки. -sendevent булевское Значение параметра булевское должно быть булевским; он задает значение поля send_event для события. Имеет смысл для всех событий. Параметр соответствует подстановке %E для скриптов привязки. -serial число Значение параметра должно быть целым числом; задает значение поля serial для события. Имеет смысл для всех событий. Параметр соответствует подстановке %# для скриптов привязки. -state состояние Параметр задает значение поля state для события. Для событий KeyPress, KeyRelease, ButtonPress, ButtonRelease, Enter, Leave и Motion значение параметра должно быть целым. Для событий Visibility параметр может принимать одно из значений VisibilityUnobscured, VisibilityPartiallyObscured или VisibilityFullyObscured. Этот параметр подавляет любые модификаторы, например, Meta или Control, указанные в основном событии. Параметр соответствует подстановке %s для скриптов привязки. -subwindow окно Аргумент окно задает поле subwindow для события либо в виде имени пути примитива Tk, либо в виде целочисленного идентификатора окна. Имеет смысл для событий KeyPress, KeyRelease, ButtonPress, ButtonRelease, Enter, Leave и Motion. Аналогичен подстановке %S для скриптов привязки. -time целое Параметр должен иметь целое значение; задает значение поля time для события. Имеет смысл для событий KeyPress, KeyRelease, ButtonPress, ButtonRelease, Enter, Leave, Motion и Property. Параметр соответствует подстановке %t для скриптов привязки. -width размер Параметр размер представляет собой расстояние на экране; задает значение поля width события. Параметр имеет смысл для событий Configure. Параметр соответствует подстановке %w для скриптов привязки. -when когда Параметр когда задает момент обработки события; должен принимать одно из следующих значений: now Событие обрабатывается немедленно, до завершения выполнения команды. То же самое происходит и в случае, если параметр -when опущен.

    tail Устанавливает событие в очередь событий Tcl вслед за всеми стоящими в этой очереди событиями данного приложения.

    head Устанавливает событие в начало очереди событий Tcl; оно будет обработано перед остальными событиями, уже стоящими в очереди.

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

    -x коорд Параметр коорд представляет собой расстояние на экране; задает значение поля x события. Параметр имеет смысл для событий KeyPress, KeyRelease, ButtonPress, ButtonRelease, Enter, Leave, Motion, Expose, Configure, Gravity и Reparent. Параметр соответствует подстановке %x для скриптов привязки. -y коорд Параметр коордпредставляет собой расстояние на экране; задает значение поля y события. Параметр имеет смысл для событий KeyPress, KeyRelease, ButtonPress, ButtonRelease, Enter, Leave, Motion, Expose, Configure, Gravity и Reparent. Параметр соответствует подстановке %y для скриптов привязки. Значением всякого параметра, не указанного при генерации события, становится 0, за исключением параметра serial, которому присваивается сериальный номер очередного X события.
    ПРИМЕРЫ ВИРТУАЛЬНЫХ СОБЫТИЙ Для обращения к привязке к виртуальному событию необходимо выполнение двух условий. Во-первых, это виртуальное событие должно быть определено командой event add. Во-вторых, к этому виртуальному событию должна быть создана привязка с помощью команды bind. Рассмотрим следующие определения виртуальных событий:   event add <<Paste>> <Control-y>

    event add <<Paste>> <Button-2>

    event add <<Save>> <Control-X><Control-S>

    event add <<Save>> <Shift-F12>
     

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

    bind Entry <<Paste>> {%W insert [selection get]}

    Двойные угловые скобки показывают, что выполняется привязка к виртуальному событию. При нажатии клавиш Control-y или кнопки 2 ⌠Мыши■ или при синтезировании виртуального события <<Paste>> командой event generate будет выполнена привязка <<Paste>>.

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

    event add <<Paste>> <Control-y> <Meta-Control-y>

    bind Entry <Control-y> {puts Control-y}

    bind Entry <<Paste>> {puts Paste}

    При нажатии на клавиши Control-y будет выполнена привязка <Control-y>, так как физическое событие считается более конкретным, чем виртуальное, а в остальном все одинаково. Однако при нажатии клавиш Meta-Control-y будет выполнена привязка <<Paste>>, так как модификатор Meta в физическом образце, связанном с виртуальной привязкой, более конкретен, чем последовательность <Control-y> для физического события.

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

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

    bind <Entry> <Control-y> {}

    event add <<Paste>> <Key-F6>

    то поведение события изменится в двух направлениях. Во-первых, всплывет подавленная привязка <<Paste>>. Нажатие на клавиши Control-y приведет теперь не к выполнению привязки <Control-y>, а к выполнению виртуального события <<Paste>>. Во-вторых, нажатие на клавишу F6 также приведет к выполнению привязки <<Paste>>.

    См. также bind.
     

     Если последовательность не связана с данным виртуальным событием в текущий момент, то она игнорируется. Если аргумент последовательность отсутствует, то из списка удаляются все последовательности физических событий и данное виртуальное событие не может быть более осуществлено.   event generate окно событие ?параметр значение параметр значение ...? Генерирует событие в окне и обеспечивает его обработку таким образом, как если бы оно поступило из менеджера окон. Аргумент окно задает имя пути окна, в котором будет генерироваться событие; его значением может быть и идентификатор окна (такой же, какой служит результатом команды winfo id), если он относится к окну в текущем приложении. Аргумент событие задает описание события, например, в виде <Shift-Button-2> или <<Paste>>. Аргумент событие может принимать любое значение, допустимое для аргумента последовательность команды bind, за исключением того, что он должен состоять из одного, а не из нескольких событий. Пары параметр-значение можно использовать для установки значений дополнительных параметров события, например, координат курсора ⌠Мыши■ ниже (см. "ПОЛЯ  СОБЫТИЯ"). Если параметр -when не задан, то событие обрабатывается немедленно; все программы обработки события будут выполнены до завершения команды event generate. В противном случае момент обработки определяется значением параметра -when. event info ?<<виртуальное>>? Возвращает информацию о виртуальных событиях. Если аргумент <<виртуальное>> опущен, то возвращается список всех виртуальных событий, определенных в текущий момент. Если аргумент <<виртуальное>> задан, то возвращаемое значение представляет собой список, элементы которого являются последовательностями физических событий, связанными с данным виртуальным событием; если указанное виртуальное событие не определено, то команда возвращает пустую строку.
    focus


    Управление фокусом ввода.
  •  Синтаксис
  • Описание
  •  Особенности реализации
  • СИНТАКСИС

         focus
         focus окно
         focus параметр ?арг арг ...?

    ОПИСАНИЕ

        Команда focus используется для управления фокусом ввода Tk. В любой момент
         времени одно из окон на каждом экране находится в фокусе ввода; всякое
         событие нажатия или отпускания клавиши интерпретируются в этом окне. Обычно
         переключение фокуса между окнами верхнего уровня на экране осуществляется
         менеджером окон. Например, некоторые менеджеры окон автоматически
         переключают фокус на окно верхнего уровня, как только на него попадает курсор
         ⌠Мыши■ ; другие устанавливают фокус только при щелчке на окне. Обычно
         менеджер окон устанавливает фокус только на окнах верхнего уровня, а
         переключением фокуса между подчиненными окнами занимается конкретное
         приложение.

        Для каждого верхнего уровня Tk запоминает одно окно в фокусе (последнего
         наследника данного верхнего уровня, в которое попал фокус); когда менеджер
         окон переключает фокус на данный верхний уровень, Tk автоматически
         устанавливает его на запомненное окно. Внутри конкретного верхнего уровня Tk
         использует явное моделирование фокуса по умолчанию. Обычно перемещение
         курсора ⌠Мыши■ без изменения верхнего уровня не приводит к переключению
         фокуса; переключение происходит, лишь если его запросил примитив (например, в
         результате щелчка по кнопке ⌠Мыши■ ) или если пользователь нажал, например,
         клавишу Tab.

        Неявная модель фокусировки создается процедурой Tcl tk_focusFollowsMouse;
        она меняет параметры конфигурации Tk таким образом, чтобы фокус
         устанавливался на окно при попадании на него курсора ⌠Мыши■. Процедуры Tcl
         tk_focusNext и tk_focusPrev устанавливают порядок переключения фокуса
         между окнами верхнего уровня. Эти процедуры определяют, помимо прочего,
         привязки по умолчанию к клавишам Tab и Shift-Tab.

        Команда focus может принимать одну из следующих форм:

         focus
         Возвращает имя пути окна в фокусе на дисплее, содержащем главное
                   окно приложения, или пустую строку, если никакое окно данного
                   приложения не находится в фокусе. Замечание: дисплей лучше указать
                   явно с помощью параметра -displayof (см. ниже); в этом случае команда
                   сможет работать и в приложениях, использующих несколько дисплеев.
         focus окно

         Если одно из окон данного приложения находится в фокусе на дисплее
                   окна, то команда устанавливает фокус ввода на окно и возвращает
                   пустую строку. Если же у приложения не было фокуса ввода на дисплее
                   окна, то окно будет запомнено как окно в фокусе для данного верхнего
                   уровня. При попадании фокуса на данный верхний уровень в очередной
                   раз Tk установит его на окно. Если аргументом является пустая строка,
                   то команда не выполняет никаких действий.
      focus -displayof окно
         Возвращает имя окна в фокусе на дисплее, содержащем окно. Если окно
                   в фокусе на дисплее окна не принадлежит данному приложению, то
                   команда возвращает пустую строку.
    focus -force окно
                   Устанавливает окно в фокус на дисплее окна, даже если у приложения
                   нет фокуса ввода на этом дисплее. Эту команду следует использовать
                   экономно или отказаться от его использования совсем. Обычно
                   приложение не должно запрашивать для себя фокус самостоятельно,
                  дожидаясь пока на него не переключит фокус менеджер окон. Если
                   аргументом является пустая строка, то команда не выполняет никаких
                   действий.
    focus -lastfor окно
                   Возвращает имя окна, последним получившим фокус ввода среди всех
                   окон того же верхнего уровня, что и окно. Если ни на какое из окон
                   данного верхнего уровня фокус не устанавливался или если окно, на
                   которое фокус устанавливался последним, удалено, то команда
                   возвращает имя верхнего уровня. Возвращаемое значение является
                   именем окна, на котором будет установлен фокус ввода при следующей
                   передаче фокуса на данный верхний уровень менеджером окна.

    ОСОБЕННОСТИ РЕАЛИЗАЦИИ

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

    font


    Создание шрифтов и контроль за ними.
     
  • Синтаксис

  •  
  • Описание

  •  
  •  Описание шрифта

  •  
  •  Метрические характеристики шрифтов

  •  
  •  Параметры шрифтов

  •  
  • Особенности реализации на различных платформах
  •  
  • СИНТАКСИС

         font параметр ?арг арг ...?

    ОПИСАНИЕ

    Команда font обеспечивает работу со шрифтами: определение поименованных шрифтов и запрос фактических параметров шрифтов. У команды несколько различных форм, которые задаются первым аргументом. В настоящее время поддерживаются следующие формы команды:      font actual шрифт ?-displayof окно? ?параметр?
    Возвращает информацию о фактических значениях параметров шрифта, выводимого на экран. Фактические параметры могут отличаться от запрошенных благодаря ограничениям, накладываемым платформами (например, доступность различных семейств шрифтов или различных кеглей).  Аргумент шрифт представляет собой описатель шрифта ниже (см. "Описание шрифта"). Если аргумент окно опущен, то по умолчанию команда относится к  главному окну. Если задан аргумент параметр, то команда возвращает  значение указанного параметра. Если этот аргумент опущен, то возвращаемое значение представляет собой список всех атрибутов и их значений. Список возможных атрибутов приведен ниже (см. "Параметры шрифтов").
         font configure имяшрифта?параметр? ?значение параметр значение ...? Запрашивает значения параметров конфигурации примитива или изменяет их.
    Если параметр не указан, то возвращает список, содержащий значения всех параметров шрифта имяшрифта. Если параметр задан, а его новое значение ≈ нет, то команда возвращает текущее значение указанного параметра. Если заданы одна или несколько пар параметр-значение, то указанным параметрам шрифта присваиваются новые значения, а содержимое всех примитивов, использующих данный шрифт меняется в соответствии с новыми значениями параметров. Список возможных атрибутов приведен ниже (см. "Параметры шрифтов").
     
    font create?имяшрифта? ?параметр значение ...? Создает новый поименованный шрифт и возвращает его имя. Аргумент имяшрифта задает имя шрифта; если этот аргумент опущен, то Tk генерирует новое имя вида fontx, где x ≈ целое число. Число пар параметр-значение может быть произвольным, они задают значения соответствующих параметров нового поименованного шрифта. Список возможных атрибутов приведен ниже (см. "Параметры шрифтов").
     
    font delete имяшрифта ?имяшрифта ...? Удаляет указанные поименованные шрифты. В случае, если удаляемый шрифт используется в одном из примитивов, фактическое удаление не происходит пока не будет вычеркнуто последнее вхождение шрифта в примитив. Если удаленный поименованный шрифт впоследствии создается вновь повторным вызовом команды font create, то в примитивах будет использоваться новый поименованный шрифт с новыми значениями параметров.


    font families ?-displayof окно?

     
    Возвращает список имен всех семейств шрифтов (без различения верхнего и нижнего регистров), существующих на дисплее заданного окна. Если аргумент окно опущен, то его значением по умолчанию является главное окно.
     
    font measure шрифт ?-displayof окно? текст Подсчитывает протяженность текстовой строки при выводе ее на экран в данном шрифте. Аргумент шрифт задает описатель текста (см. "Описание шрифта"). Возвращает общую ширину текста в пикселах без учета сильно искаженных символов (как, например, ⌠f■ курсивного). Если в строке есть символы табуляции или перевода строки, то они не влияют на результат подсчета.
     
    font metrics шрифт ?-displayof окно? ?параметр? Возвращает информацию о метрических характеристиках шрифта при его
    выводе на экран. Аргумент шрифт задает описатель шрифта, (см. "Описание шрифта"). Если аргумент окно опущен, то его значением по умолчанию
              является главное окно. Если задан аргумент параметр, то команда
              возвращает значение указанной метрической характеристики; если этот
              аргумент опущен, то возвращается список значений всех метрических
              характеристик шрифта. Список метрических характеристик приведен ниже (см.
              "Метрические характеристики шрифтов").
     
         font names
        Возвращает список всех поименованных на текущий момент шрифтов.


    ОПИСАНИЕ ШРИФТА
     
     

    В качестве описателя шрифта в любой из приведенных выше команд принимаются следующие данные; те же самые форматы допустимы и в качестве значения параметра -font в описателе примитива. [1] имяшрифта Имя поименованного шрифта, созданного командой font create. Использование поименованного шрифта не может привести к ошибке вне зависимости от того, насколько потенциально ошибочны или бессмысленны значения параметров этого шрифта. Если вывод символов в поименованном шрифте невозможен, то для их вывода используется автоматически подбираемый шрифт с близкими значениями параметров.


         [2] систшрифт
         Имя (зависящее от используемой платформы) шрифта,
                   интерпретируемого графическим сервером. Сюда входит также (под X)
                   шрифт XLFD (см. [4]), в котором используется единственный символ "*",
                   предназначенный для забивки нескольких полей в середине имени.
                   Список системных шрифтов приведен в части текста, описывающей
                   особенности данной платформы.

         [3] семейство ?размер? ?стиль? ?стиль ...?
         Список, первым элементом которого является требуемое семейство
                   шрифтов, а вторым, необязательным, элементом ≈ требуемый размер.
                   Параметр размер интерпретируется по тем же правилам, что и параметр
                   -size (см. "Параметры шрифтов"). Все остальные необязательные
                   аргументы, следующие за параметром размер, представляют собой
                   стили шрифтов. Они могут иметь следующие значения:

                      normal                                  bold                                                   roman
                      italic                                  underline                                                  overstrike
     

         [4] X-шрифт имена (XLFD)
                   Имя шрифта для Unix-машин, представленное в виде

                   -заливка-семейство-шрифт-наклон-устширина-добстиль-пиксель-точка-
    разрешx-разрешy-промежуток-ширина-наборсимволов-кодирование

                   -foundry-family-weight-slant-setwidth-addstyle-pixel-point-resx-
    resy-spacing-width-charset-encoding.

         Поля, содержимое которых пользователю безразлично, можно
                   пропустить, заменив символом "*". Каждому пропущенному полю должен
                   соответствовать ровно один символ "*", а символ ⌠*■ в конце XLFD
                   приводит к пропуску всех оставшихся полей; кратчайшая форма XLFD
                   имеет вид просто "*", что означает, что значения всех полей берутся по
                   умолчанию. Всем пропущенным полям присваиваются значения по
                   умолчанию. В целях совместимости XLFD всегда выбирает шрифт
                   заданного размера в пикселах (а не в точках). Несмотря на некоторую
                   некорректность выбранного подхода, все приложения, использующие
                   XLFD, предполагают, что ⌠точка■ в действительности совпадает с одним
                   пикселем, и при использовании корректного размера шрифта могут
                   привести к неправильному выводу шрифта (обычно с более крупными
                   символами).

         [5] параметр значение ? параметр значение ...?
                   Правильно сформированный список пар параметр-значение, задающих
                   атрибуты шрифта, в том же формате, что и при определении
                   поименованного шрифта (см. "Параметры шрифтов").

        При использовании описателя шрифта система пытается проанализировать
         описание в соответствии с приведенными выше пятью правилами в указанном
         порядке. В случаях [1] и [2] имя шрифта должно соответствовать существующему
         поименованному шрифту или системному шрифту. Случаи [3], [4] и [5]
         принимаются на всех платформах и в них будет использоваться шрифт, по
         параметрам ближайший к требуемому. В некоторых ситуациях оказывается
         невозможно найти близкий шрифт (например, имя семейства оказалось
         испорченным); в этом случае выбирается один из системно-зависимых шрифтов по
         умолчанию. Если описатель шрифта не подходит ни под один из приведенных
         выше образцов, то возникает ошибка.

    МЕТРИЧЕСКИЕ ХАРАКТЕРИСТИКИ ШРИФТОВ

    Команда font metrics использует следующие параметры для запроса данных,
    определяемых при создании шрифта. Это характеристики шрифта в целом, а не

    отдельных его символов. В нижеследующих определениях ⌠основа шрифта■ ≈ это

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

    -ascent
     

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


         -descent
         Наибольшая протяженность в пикселях буквы шрифта под основой плюс
                   дополнительное пустое пространство, добавленное разработчиком
                   шрифта.
         -linespace
         Возвращает расстояние между строками текста, использующими один и
                   тот же шрифт, необходимое для того, чтобы символы верхней строки не
                   перекрывались с символами нижней. Обычно это сумма зазора под
                   верхней и над нижней строкой.
         -fixed
         Возвращает булевское значение, равное `1' для шрифта постоянной
                   ширины, в котором ширина всех обычных символов одинакова, и равное
                   `0▓ для пропорционального шрифта, разные буквы которого имеют
                   различную ширину. Ширина управляющих символов, символов
                   табуляции и других непечатаемых символов при вычислении этого
                   значения не учитывается.
     

    ПАРАМЕТРЫ ШРИФТОВ

        Следующие параметры поддерживаются на всех платформах и используются для
         конструирования поименованного шрифта или при задании шрифта с помощью
         стиля [5] выше:

         -family имя
         Имя семейства шрифтов (нечувствительное к регистру). Tk обязательно
                   поддерживает семейства с именами Courier (моноширинный шрифт
                   ⌠пишущей машинки■), Times (⌠газетный■ шрифт с засечками) и Helvetica
                   (рубленый ⌠европейский■ шрифт). При использовании одного из этих
                   семейств шрифтов оно автоматически заменяется наиболее подходящим
                   ⌠родным■ шрифтом. Имя семейства также может быть именем одного из
                   родных шрифтов, зависящих от платформы; в этом случае семейство
                   будет работать на своей платформе, как положено, однако при переходе
                   к другой платформе могут возникнуть неприятности. Если имя семейства
                   не задано или не опознано, то будет выбран шрифт по умолчанию для
                   данной платформы.

         -size размер
         Требуемый кегль (размер) шрифта. Если значением аргумента является
                   положительное число, то оно интерпретируется как размер символов в
                   точках. Если значение отрицательно, то его абсолютная величина
                   интерпретируется как размер в пикселах. Если шрифт указанного кегля
                   нельзя вывести, то берется ближайший доступный размер. Если размер
                   не задан или его значение равно нулю, то будет выбран размер по
                   умолчанию для данной платформы.

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

         -weight вес
         Условная толщина символов в шрифте. Значение normal задает шрифт
                   нормальной толщины, bold ≈ жирный шрифт. Выбирается доступная
                   толщина, ближайшая к заданной. По умолчанию параметр имеет
                   значение normal.

         -slant наклон
         Величина, на которую символы шрифта отклоняются по вертикали.
                   Допустимы значения roman и italic. Шрифт с наклоном roman ≈ это
                   обычный прямой шрифт, а символы шрифта с наклоном italic
         отклоняются от вертикали на несколько градусов. Выбирается доступный
                   наклон, ближайший к заданному. По умолчанию параметр имеет
                   значение roman.

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

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

    ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА РАЗЛИЧНЫХ ПЛАТФОРМАХ

        Различные платформы поддерживают следующие поименованные системные
         шрифты:

         X Windows:
                   Все допустимые имена X шрифтов, включая перечисляемые
                             командой xlsfonts(1).
         MS Windows:

                     system                                        ansi                                                     device
                     systemfixed                               ansifixed                                            oemfixed
     

         Макинтош:

         system application

         См. также options.
     
     

    frame


    Команда создает и управляет примитивами рамок (frames).
     
         
  • Синтаксис
  • Стандартные параметры
  • Дополнительные параметры примитива
  • Описание
  • Команда примитива
  • Привязки

  • СИНТАКСИС

    frame имяПути параметры СТАНДАРТНЫЕ ПАРАМЕТРЫ
         
    -borderwidth -highlightbackground
    -highlightthickness -takefocus
    -cursor -highlightcolor
    -relief  
    Подробное описание этих параметров приведено в разделе options. ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА Имя параметра: -background
    Имя в Базе: background
    Класс в Базе: Background


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

    Имя параметра: -class
    Имя в Базе: class
    Класс в Базе: Class
    Задает класс окна. Этот класс используется при запросе значений других параметров окна в базе параметров, а также для других целей (например, при задании привязок). Значение параметра class нельзя поменять с помощью команды примитива configure.
      Имя параметра: -colormap
    Имя в Базе: colormap
    Класс в Базе: Colormap
    Задает цветовую схему окна. Может либо принимать значение new (в этом случае для окна и его потомков создается новая цветовая схема), либо быть именем другого окна на том же экране с тем же именемПути (в этом случае новое окно берет цветовую схему указанного окна). Если параметр colormap не задан, то новое окно наследует цветовую схему своего предка. Значение параметра colormap нельзя поменять с помощью команды примитива configure.
      Имя параметра: -container
    Имя в Базе: container
    Класс в Базе: Container


    Значение параметра должно быть булевским. Если оно истинно, то окно предназначено для включения какого-то другого приложения (например, приложение Tk верхнего уровня может быть включено с помощью параметра -use). В этом случае окно способно поддерживать соответствующие протоколы управления окнами (например, обеспечивать исполнение геометрических запросов). В данном приложении не должно быть собственных потомков окна. Значение параметра container нельзя поменять с помощью команды примитива configure.
     

    Имя параметра: -visual
    Имя в Базе: visual
    Класс в Базе: Visual
    Задает визуальную информацию для нового окна в любой из форм, поддерживаемых Tk_GetVisual. Если параметр не задан, то окно будет использовать ту же визуальную информацию, что и его непосредственный предок. Значение параметра visual нельзя поменять с помощью команды примитива configure.  
    Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width


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

    ОПИСАНИЕ Команда frame создает новое окно (заданное аргументом имяПути) и превращает его в примитив рамки. Детали изображения рамки, такие как ее цвет фона и объемный вид, задаются с помощью описанных выше дополнительных параметров. Команда frame возвращает имя пути нового окна.

    Рамка представляет собой простой примитив. Она предназначена в первую очередь для размещения внутри нее окон сложным образом. Единственными характеристиками рамки являются цвет ее фона и (необязательно) способ изображения трехмерного бордюра ≈ выпуклым или вдавленным.

    КОМАНДА ПРИМИТИВА Команда frame создает новую команду Tcl с именем пути окна рамки. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

    имяПути параметр арг арг ...
     

    ИмяПути ≈ это имя команды, совпадающее с именем пути примитива. Параметр и аргументы уточняют поведение команды. Примитивы кнопки допускают следующие формы команды:


    имяПути cget параметр
     

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


    имяПути configure параметр значение параметр значение ...
     

    Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды frame.
    ПРИВЯЗКИ  
    При создании новой рамки она не имеет привязок по умолчанию: рамки не предполагаются интерактивными.

    grab
    Направляет события, исходящие из клавиатуры и указателя ⌠Мыши■ в модальное окно и его поддерево.
         
  • Синтаксис

  •  
  • Описание

  •  
  • Ошибки
  •  
    СИНТАКСИС grab ?-global? окно

    grab параметр ?арг арг ...?

    ОПИСАНИЕ Команда реализует простые перехватчики событий ввода с клавиатуры и ⌠Мыши■. Перехватчики Tk отличаются от перехватчиков, описанных в документации Xlib. Когда для некоторого окна задан перехватчик, Tk ограничивает все события, исходящие от курсора, границами модального окна и его потомков в иерархии окон Tk. Если курсор находится в пределах поддерева модального окна, то курсор будет вести себя так, будто нет никакого перехватчика вообще. Если курсор находится вне поддерева модального окна, то события нажатия и освобождения кнопок ⌠Мыши■ будут передаваться в окно, а события входа в окно и выхода из окна будут игнорироваться. Поддерево окон перехватчика ⌠владеет■ курсором: прочие окна будут видны на экране, но будут нечувствительны к нажатиям кнопок ⌠Мыши■ до тех пор, пока не будет прекращен перехват. В поддерево модального окна могут входить окна верхнего уровня; в этом случае все эти окна верхнего уровня и их потомки обрабатывают события курсора ⌠Мыши■ при перехвате обычным образом.

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

    Есть два типа перехватчиков: локальные и глобальные. Локальный перехватчик влияет только на перехватывающее приложение, остальные приложения ведут себя таким образом, как если бы никакого перехвата не было. По умолчанию перехватчики локальные. Глобальный перехватчик блокирует все приложения на экране; чувствительность к событиям указателя (нажатия и отпускания клавиши ⌠Мыши■, движения указателя, входы в окно и выходы из него) сохраняют только окна поддерева модального окна. При действии глобального перехватчика менеджер окон также нечувствителен к событиям указателя.

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

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

    Команда grab может иметь одну из следующих форм:

    grab ?-global? окно
     

    Совпадает с описанной ниже командой grab set.


    grab current ? window?

    Если задан параметр window, то команда возвращает имя текущего модального окна в данном приложении; если такого окна нет, то команда возвращает пустую строку. Если параметр window опущен, то команда возвращает список, элементами которого являются все окна, захваченные данным приложением на всех дисплеях; если таких окон нет, то команда возвращает пустую строку. grab release окно Отменяет перехватчика на указанном окне; если в окне нет перехватчика, то команда не выполняет никаких действий. Команда возвращает пустую строку. grab set ?-global? окно Устанавливает перехватчик на окно. Если задан параметр-global, то перехватчик будет глобальным; в противном случае он будет локальным. Если на дисплее окна у приложения уже был перехватчик, то он автоматически отменяется. Если на данном окне уже установлен перехватчик того же вида (глобальный или локальный), что и запрошенный, то команда не выполняет никаких действий. Команда возвращает пустую строку. grab status окно Возвращает none, если в окне нет перехватчика, local, если в окне установлен глобальный перехватчик, global, если в окне установлен глобальный перехватчик.
    ОШИБКИ Реализация описанного выше эффекта простого перехватчика оказалась чрезвычайно сложной и громоздкой. В текущей реализации прямое использование приложениями перехватчиков Xlib небезопасно; это нужно делать через процедуры Tk.

    Если несколько приложений Tk управляются одним процессом, то на данном дисплее только одно из этих приложений может иметь локального перехватчика в каждый конкретный момент. Этого ограничения нет для приложений, управляемых различными процессами.
     
     

    grid
    Геометрический менеджер, который размещает виджеты в ячейках сетки.    
  • Синтаксис

  •  
  • Описание

  •  
  • Относительное размещение

  •  
  • Алгоритм размещения

  •  
  • Распространение размеров

  •  
  • Ограничения на мастер-окна

  •  
  • Порядок размещения
  • СИНТАКСИС grid option arg ?arg ...? ОПИСАНИЕ Команда grid используется для управления соответствующим геометрическим менеджером, размещающим виджеты по ячейкам сетки, и для получения от него справочной информации. Команда может иметь перечисленные ниже формы в зависимости от значения аргумента option.

    grid slave ?slave ...? ?options?

    Если первый аргумент команды является именем окна (любая величина, начинающаяся с ⌠.⌠), команда выполняется точно также, как команда grid configure. grid bbox master ?column row? ?column2 row2? Без аргументов команда возвращает размер ограничивающего прямоугольника для сетки (в пикселях). Возвращаемая величина состоит из четырех чисел. Первые два представляют собой расстояние от границы окна до левого верхнего угла сетки. Следующие два числа представляют ширину и высоту сетки. Если указана единственная колонка и строка, возвращается ограничивающий прямоугольник для соответствующей ячейки сетки (счет слева сверху, начиная с нуля). Если указаны два набора колонок и строк, то возвращается размер прямоугольника, ограничивающего соответствующую область сетки. grid columnconfigure master index ?-option value...? Запрашивает или устанавливает свойства колонки для колонки сетки номер index. Допустимые опции minsize, -weight и -pad. Если одна или более опций указаны, index может быть списком номеров колонок, для которых соответствующие значения опций должны быть установлены. Опция ≈ minsize устанавливает минимальный размер колонки на экране.

    Опция -weight (допустимые значения ≈ целые числа) устанавливает относительный вес, используемый при распределении свободного пространства между колонками. Нулевой вес указывает, что колонка не будет расширяться. Колонка с весом 2 будет расти вдвое быстрее, чем колонка с весом 1.

    Опция -pad определяет размер полей, которые будут добавлены к размерам максимального окна в колонке при определении необходимой ширины колонки.

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

    grid configure slave ?slave ...? ?options?

    Аргумент(ы) slave представляют собой имена виджетов, которые размещаются в ячейках сетки. За ними следуют пары аргументов, состоящие из имен опций и их значений, которые управляют размещением виджетов. Символы ▒-▓, ▒x▓ и ▒^▓ могут использоваться вместо имен виджетов, чтобы изменить их типовое размещение (детально правила использования этих символов описано ниже (см. "Отосительное размещение "). Допустимые имена опций: -column n Вставляет виджет в n-ую колонку сетки. Номера колонок начинаются с нуля. Если опция не указана, виджет вставляется правее предыдущего виджета, вставленного той же командой grid, или в колонку ▒0▓, если это первый виджет в команде. Для каждого символа ▒x▓ непосредственно перед именем виджета номер колонки увеличивается на 1. То есть ▒x▓ представляет пустую колонку в текущем ряду сетки. -columnspan n Вставляет виджет таким образом, что он занимает n колонок сетки. По умолчанию виджет занимает одну колонку, если только после имени виджета не идет символ ▒-▓. В этом случае каждый последующий символ ▒-▓ увеличивает на единицу величину columnspan. -in other Вставляет виджет(ы) в мастер-окно other. По умолчанию виджет вставляется в непосредственного предка. -ipadx amount Аргумент amount определяет горизонтальные внутренние поля, которые вставляются в виджет(ы). Эти поля вставляются внутри границы виджета. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию ▒0▓. -ipady amount Аргумент amount определяет вертикальные внутренние поля, которые вставляются в виджет(ы). Эти поля вставляются внутри границы виджета. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию ▒0▓. -padx amount Аргумент amount определяет горизонтальные внешние поля, которые вставляются в виджет(ы). Эти поля вставляются вне границы виджета. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию ▒0▓. -pady amount Аргумент amount определяет вертикальные внешние поля, которые вставляются в виджет(ы). Эти поля вставляются вне границы виджета. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию ▒0▓. -row n Вставляет виджет в n-ную строку сетки. Номера строк считаются с нуля. Если опция не указана, виджет вставляется в ту же строку, что и предыдущий виджет в данной команде grid, или в первую свободную строку, если это правый виджет в команде. -rowspan n Вставляет виджет таким образом, чтобы он занимал n строк. Значение по умолчанию `1▓. Если в следующей команде grid содержится символ ⌠^■, то он означает, что виджет, находящийся в этом же столбце в предыдущей строке, должен быть расширен еще на одну строку вниз. -sticky style Если виджет меньше размеров ячейки сетки, опция позволяет разместить (или растянуть) виджет внутри ячейки. Аргумент style является строкой, содержащей одну или несколько из букв n, s, e или w. Строка может содержать пробелы или запятые, но они игнорируются. Каждая из букв означает одну из сторон ячейки, к которой виджет будет ⌠приклеен⌠. Если в строке содержатся символы для двух противоположных сторон, например, n и s (или e и w), виджет будет увеличен таким образом, чтобы заполнить всю высоту (или ширину) ячейки. Таким образом опция -sticky заменяет сразу опции -anchor и -fill для менеджера pack. Значение по умолчанию ≈ пустая строка, которая означает, что виджет будет размещен в центре ячейки и будет иметь свой естественный размер. Если какой-либо из виджетов, перечисленных в команде, уже размещен в сетке, а в команде для него указаны не все возможные опции, для остальных опций используются предыдущие значения, а не значения по умолчанию.

    grid forget slave ?slave ...?

    Удаляет виджет(ы) из сетки и с экрана. Они больше не управляются менеджером grid. Значения опций для удаляемых виджетов не сохраняются, так что если виджет будет через некоторое время помещен в сетку, для него будут использоваться значения опций по умолчанию. grid info slave Возвращает список опций и их значений для окна slave в той же форме, в какой они задаются в команде grid configure. Первые два элемента списка ≈ ``-in master'', где ⌠master'' ≈ имя окна, в котором размещается slave. grid location master x y Аргументы x и y должны быть координатами в системе координат мастер окна. Команда возвращает номер колонки и строки, в которой находится точка с координатами x и y. Если она расположена выше или левее сетки, возвращается `-1▓. grid propagate master ?boolean? Аргумент boolean, если он задан, определяет, будет ли окно master расширяться при необходимости (подробное описание опции см. "Распространение размеров"). Команда при этом возвращает пустую строку. Если аргумент не задан, команда возвращает текущее значение опции (`0' или `1'). По умолчанию расширение разрешено. grid rowconfigure master index ?-option value...? Запрашивает или устанавливает свойства строки для строки сетки номер index. Допустимые опции minsize, -weight и -pad. Если одна или более опций указаны, index может быть списком номеров строк, для которых соответствующие значения опций должны быть установлены. Опция -minsize устанавливает минимальный размер строки на экране.

    Опция -weight (допустимые значения ≈ целые числа) устанавливает относительный вес, используемый при распределении свободного пространства между строками. Нулевой вес указывает, что строка не будет расширяться. Строка с весом 2 будет расти вдвое быстрее, чем строка с весом 1.

    Опция -pad определяет размер полей, которые будут добавлены к размерам максимального окна в строке при определении необходимой ширины колонки.

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

    grid remove slave ?slave ...?

    Удаляет виджет(ы) из сетки и с экрана. Они больше не управляются менеджером grid. Однако, значения опций для них сохраняются, так что если виджет будет через некоторое время помещен в сетку, для него будут использоваться прежние значения опций. grid size master Возвращает размер сетки (в колонках и строках) для окна master. Размер определяется наибольшим номером строки или столбца, в которых размещен виджет или задано ненулевое значение одной из опций -minsize, -weight или -pad. grid slaves master ?-option value? Если опции не заданы, возвращает список всех виджетов, размещенных в сетке (размещенные позже в списке стоят раньше). Допустимые опции -row и -column. Если они указаны, команда возвращает список виджетов, размещенных в соответствующей строке или столбце.
    ОТНОСИТЕЛЬНОЕ РАЗМЕЩЕНИЕ Команда grid содержит ограниченный набор возможностей для размещения виджетов без явного указания строк и колонок для каждого. Если номер строки или колонки не указан явно, он рассчитывается в момент размещения виджета исходя из текущего заполнения сетки, позиции виджета относительно других виджетов и наличия в команде специальных символов ⌠-■, ⌠x■ и ⌠^■ вместо имен виджетов.

    -

    Этот символ увеличивает значение опции -columnspan для виджета слева. Несколько символов ⌠-⌠ подряд означают последовательное увеличение значения опции -columnspan. Символ ⌠-⌠ не может стоять после ⌠^■ или ⌠x■.


    x

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


    ^

    Этот символ увеличивает значение опции -rowspan для виджета в соответствующей колонке предыдущей строки. Число и расположение символов ⌠^⌠ в строке должно соответствовать числу и расположению расширяемых виджетов в предыдущей строке.
    АЛГОРИТМ РАЗМЕЩЕНИЯ grid  
    Геометрический менеджер grid размещает виджеты в окне в три шага. На первом шаге определяются минимальные размеры, необходимые для размещения всех виджетов и (если распространение размеров разрешено) формируется запрос на изменение размеров мастер-окна. На втором шаге необходимые размеры сравниваются с реальными размерами мастер-окна. Если они не совпадают, то размеры виджетов пересчитываются соответствующим образом. На третьем шаге каждый виджет размещается в своей колонке (колонках) и строке (строках) в соответствии со значением опции -sticky.

    Чтобы определить минимальные размеры, необходимые для колонок и строк, геометрический менеджер сначала рассматривает те виджеты, у которых значения обеих опций -columnspan и -rowspan равны `1▓, рассчитывает их размер и определяет минимальный размер колонок и строк как максимум из соответствующих размеров размещаемых в них виджетов (включая поля) и значения соответствующей опции -minsize. После этого рассматриваются виджеты со значением опции -columnspan или -rowspan больше единицы. Если отведенная группа колонок или строк мала для такого виджета, тогда дополнительный размер распределяется между членами группы пропорционально значениям их опций -weight. Если все члены группы имеют нулевой вес, они получают одинаковое приращение размеров.

    Для мастер окон, размер которых оказался больше необходимого, дополнительное пространство распределяется пропорционально весам колонок и строк соответственно. Если все веса нулевые, виджеты размещаются в центре мастер-окна. Если размер мастер-окна меньше необходимого, то размеры колонок и строк уменьшаются пропорционально их весам. Однако, если размер колонки или строки уменьшился до значения соответствующей опции -minsize, ее вес считается равным нулю. Если все строки или колонки уменьшены до размеров, равных значениям опций -minsize, и требуется дальнейшее уменьшение размеров, группа виджетов обрезается справа и снизу.

    РАСПРОСТРАНЕНИЕ РАЗМЕРОВ Обычно менеджер рассчитывает размеры мастер-окна, необходимые для размещения виджетов, и, при необходимости, устанавливает размеры мастер окна таким образом, чтобы в нем в точности поместились все необходимые виджеты. Это приводит к тому, что информация о размерах виджетов распространяется по иерархическому дереву виджетов, в результате чего целое поддерево изменяет свои размеры при изменении одного из листьевых элементов. Однако, команда grid propagate может быть использована для отключения этого механизма для одного или нескольких мастер-окон. Если распространение размеров отключено, информация о необходимых размерах не передается мастер-окну. Это может оказаться полезным, если вы хотите, чтобы мастер-окно сохраняло те размеры, которые вы определили. ОГРАНИЧЕНИЯ НА МАСТЕР-ОКНА Мастер-окно для каждого размещаемого виджета должно быть его непосредственным предком (по умолчанию) или одним из потомков его предка. Это ограничение гарантирует разумное поведение виджетов при удалении toplevel-окон. ПОРЯДОК РАЗМЕЩЕНИЯ Если мастер-окно для виджета не является его непосредственным предком, необходимо быть уверенным, что виджет лежит в стеке окон выше, чем мастер-окно. В противном случае мастер-окно закроет собой виджет и создастся впечатление, что виджет не упакован правильным образом. Простейший способ избежать подобных проблем ≈ следить, чтобы мастер-окно было создано раньше, чем виджет: чем позже создано окно, тем выше оно в стеке. Если это почему-либо неудобно, можно использовать команды raise и lower для изменения порядка окон в стеке.
    image
    Создание изображений и манипулирование ими
     
     
  • Синтаксис

  •  
  • Описание

  •  
  • Встроенные типы изображений
  • СИНТАКСИС  
    image параметр ?арг арг ...?
    ОПИСАНИЕ Команда image предназначена для создания и удаления изображений, а также для получения информации о них. В зависимости от значения параметра она может иметь различные формы. Допустимы следующие формы команды:

    image create тип ?имя? ?параметр значение...?

    Создает новое изображение и возвращает его имя. Аргумент тип задает тип изображения, который должен быть одним из типов, определенных на момент выполнения команды (например, bitmap). Аргумент имя задает имя изображения; если он опущен, то Tk генерирует имя вида imagex, где x ≈ целое число. В команде может присутствовать произвольное число пар параметр-значение, задающих значения параметров конфигурации для нового изображения. Для каждого типа изображения набор допустимых параметров свой; параметры для встроенных типов изображений подробно описаны ниже. Если изображение с указанным именем уже существует, то новое изображение подменит его, а каждая его реализация заменится на реализацию нового изображения. image delete ?имя имя...? Удаляет каждое из названных изображений; возвращает пустую строку. Если в примитивах имеются реализации удаляемого изображения, то фактическое удаление не будет произведено до удаления всех реализаций. Однако связь между реализациями изображения и менеджером изображений разрывается. Существующие реализации сохранят свои размеры, однако станут пустыми. Если удаленное изображение будет воссоздано командой image create, то его реализации заполнятся новым содержимым. image height имя Возвращает десятичную строку, представляющую собой высоту в пикселах изображения с именем имя. image names
      Возвращает список имен всех существующих изображений.


    image type имя

    Возвращает тип изображения с именем имя (т.е. значение аргумента тип при создании изображения командой image create). image types Возвращает список всех допустимых типов изображений (т.е. всех возможных значений параметра тип команды image create). image width имя Возвращает десятичную строку, представляющую собой ширину в пикселах изображения с именем имя.
    ВСТРОЕННЫЕ ТИПЫ ИЗОБРАЖЕНИЙ Следующие типы изображений определены непосредственно в Tk ≈ они будут доступны в любом приложении. Отдельные приложения или расширения могут определять дополнительные типы.

    bitmap

    Каждый пиксель такого изображения имеет либо цвет переднего плана, либо цвет фона, либо не имеет никакого цвета. Подробнее такие изображения описаны в в разделе. bitmap

    photo

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

    label

                                  Команда создает и управляет примитивами ярлыков.
     
     
  • Синтаксис

  •  
  • Стандартные параметры

  •  
  • Дополнительные параметры примитива

  •  
  • Описание

  •  
  • Команда примитива

  •  
  • Привязки

  •  

     
    СИНТАКСИС label имяПути параметры СТАНДАРТНЫЕ ПАРАМЕТРЫ
         
    -anchor -font -image
    -takefocus  -background -foreground
    -justify -text -bitmap
    -highlightbackground -padx -textvariable
    -borderwidth -highlightcolor -pady
    -underline -cursor -highlightthickness
    -relief -wraplength  
    Подробное описание этих параметров приведено в разделе oрtions. ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА Имя параметра: -height
    Имя в Базе: height
    Класс в Базе: Height


    Задает желаемую высоту ярлыка. Если в ярлыке выводится изображение или двуцветное изображение, то значение параметра задается в пикселях (т.е., в любом виде, приемлемом для Tk_GetPixels); высота текстового ярлыка задается числом строчек текста. Если параметр не задан, то высота ярлыка вычисляется по его содержимому.
     

    Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width
    Задает желаемую ширину ярлыка. Если в ярлыке выводится изображение или двуцветное изображение, то значение параметра задается в пикселях (т.е., в любом виде, приемлемом для Tk_GetPixels); ширина текстового ярлыка задается числом символов. Если параметр не задан, то ширина ярлыка вычисляется по его содержимому.
    ОПИСАНИЕ Команда label создает новое окно (задаваемое аргументом имяПути) и превращает его в примитив ярлыка. Детали изображения ярлыка, такие как его цвета, шрифт, текст и исходный объемный вид задаются с помощью описанных выше дополнительных параметров. Команда label возвращает аргумент имяПути. В момент выполнения этой команды не должно существовать окна с именем имяПути, но должен существовать его предок.

    Ярлык представляет собой примитив, в котором выводится текстовая строка, изображение или двуцветное изображение. Весь выводимый текст должен быть записан одним шрифтом, однако он может занимать несколько строчек на экране (если в нем есть символы перевода строки или задан параметр wrapLength). Один из символов текста может быть подчеркнут (в соответствии со значением параметра underline). Есть несколько простых способов управления ярлыком (например, изменения его формы или редактирования текста в нем), они описаны ниже.

    КОМАНДА ПРИМИТИВА Команда label создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

    имяПути параметр арг арг ...

    Параметр и аргументы уточняют поведение команды. Примитивы ярлыка допускают следующие формы команды: имяПути cget параметр Возвращает текущее значение параметра конфигурации с именем параметр. Параметрможет быть любым из параметров команды label. имяПути configure параметр значение параметр значение ... Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан вTk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды button.
    ПРИВЯЗКИ При создании нового ярлыка он не имеет привязок по умолчанию: ярлыки не предполагаются интерактивными.
     
    listbox
    Команда создает и управляет примитивами окон со списками.  
  • Синтаксис
  • Стандартные параметры
  • Дополнительные параметры примитива
  • Описание
  • Индексы
  • Команда примитива
  • Параметры по умолчанию
  • СИНТАКСИС listbox имяПути параметры СТАНДАРТНЫЕ ПАРАМЕТРЫ
       
    -background -foreground -relief
    -takefocus -borderwidth -height
    -selectbackground -width -cursor 
    -highlightbackground -selectborderwidth -xscrollcommand
    -font -highlightthickness -setgrid
    Подробное описание этих параметров приведено в разделе options. ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА Имя параметра:     -height
    Имя в Базе: height
    Класс в Базе: Height
    Задает желаемую высоту окна (число строчек текста в нем). Если значение параметра неположительно, то высота окна выбирается таким образом, чтобы в нем помещались все элементы списка.
      Имя параметра:   -selectmode
    Имя в Базе: selectMode
    Класс в Базе: SelectMode


    Задает один из нескольких стилей управления выделением. Параметр может принимать произвольное значение, однако привязки по умолчанию предполагают, что его значение является одним из следующих: single, browse, multiple или listbox. По умолчанию параметр имеет значение browse.
     

    Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width


    Задает желаемую ширину окна (число символов в строчке текста в нем). Если ширина символа в данном шрифте непостоянна, то для перевода числа символов в единицы экрана используется ширина символа ⌠0■. Если значение параметра неположительно, то ширина окна выбирается таким образом, чтобы в нем помещались все элементы списка.

    ОПИСАНИЕ Команда listbox создает новое окно (задаваемое аргументом имяПути) и превращает его в примитив окна со списком. Детали изображения кнопки, такие как ее цвет, шрифт, текст и объемный вид, задаются с помощью описанных выше дополнительных параметров. Команда listbox возвращает аргумент имяПути. В момент выполнения этой команды не должно существовать окна с именем имяПути, но должен существовать его предок.

    Окно со списком представляет собой примитив, в котором выводятся строки ≈ элементы списка ≈ по одному на строчку окна. С помощью описываемых ниже команд примитива в список можно добавлять новые элементы или удалять элементы оттуда. Кроме того, можно выделить один или несколько элементов, как описано ниже. Экспорт выделенного текста (см. описание параметра exportSelection) осуществляется по стандартному протоколу X11 для выделений; выделения в поле ввода имеют тип STRING. Значение строки выделения составляется из выделенных элементов, разделенных символами перехода на новую строчку.

    Все элементы списка не обязательно выводятся в окне со списком одновременно. Содержимое окна можно поменять с помощью описываемых ниже команд. Окна со списком поддерживают прокрутку в обоих направлениях с помощью стандартных параметров xScrollCommand и yScrollCommand. Кроме того, возможно сканирование окон (см. описание ниже).

    ИНДЕКСЫ Аргументами многих команд примитива окна со списком служат индексы. Индекс задает положение конкретного элемента в окне со списком. Он может иметь один из следующих видов:

    число

    Задает номер элемента в списке. Первый элемент имеет номер 0.

    active

    Задает элемент, на котором расположен курсор списка. Если примитив находится в фокусе клавиатуры, то этот элемент подчеркивается. Он устанавливается командой примитива activate.

    anchor

    Задает опорную точку выделения, которую устанавливает команда примитива selection anchor.

    end

    Указывает конец списка. Для большинства команд это последний элемент списка, однако некоторые команды, такие как index и insert считают его элементом, следующим непосредственно за последним элементом списка.

    @x,y

    Указывает элемент, накрывающий точку в окне со списком с координатами (x,y) (заданными в пикселях). Если заданная точка не накрывается ни одним элементом, то указывает элемент, ближайший к этой точке.

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

    КОМАНДА ПРИМИТИВА
      Команда listbox создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

    имяПути параметр арг арг ...

    Параметр и аргументы уточняют поведение команды. Примитивы окна со списком допускает следующие формы команды: имяПути activate индекс Делает активным элемент, указанный аргументом индекс. Если значение аргумента индекс выходит за пределы списка, то активным становится элемент, ближайший к указанному. Если окно со списком находится в фокусе ввода, то активный элемент в нем выделен подчеркиванием, а доступ к нему осуществляется через индекс active. имяПути bbox индекс Возвращает список из четырех элементов, описывающий клетку, занимаемую текстом в элементе, указанном параметром индекс. Первые два элемента списка задают x- и y-координаты верхнего левого угла клетки (в пикселях по отношению к примитиву), последние два элемента ≈ ширину и высоту области (в пикселях). Если на экране не видна никакая часть элемента или если индекс указывает на несуществующий элемент, то команда возвращает пустую строку. Если же на экране видна хотя бы часть элемента, то результатом выполнения команды служит описание всей области, занимаемой элементом (в том числе и его невидимой частью). имяПути cget параметр Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды listbox. имяПути configure параметр значение параметр значение ...
      Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения. В этом случае команда возвращает пустую строку. Параметр может быть любым из параметров команды listbox.


    имяПути curselection

    Возвращает список, состоящий из числовых значений индекса всех выделенных элементов. Если ни один из элементов не выделен, то возвращает пустую строку. имяПути delete первый последний Удаляет один или несколько элементов списка. Аргумент первый является индексом первого, а аргумент последний ≈ индексом последнего удаляемого элемента. По умолчанию значение аргумента последний совпадает со значением аргумента первый, т.е. удаляется один элемент. имяПути get первый последний Если аргумент последний не задан, то возвращает содержимое элемента списка, заданного аргументом первый (или пустую строку, если первый указывает на несуществующий элемент). Если аргумент последний задан, то команда возвращает список, элементами которого являются все элементы окна между первым и последним (включая оба эти элемента). Значением каждого из аргументов первый и последний может быть любое допустимое значение индекса. имяПути index индекс Команда возвращает числовое значение индекса, заданного аргументом индекс. Если аргумент индекс имеет значение end, то возвращаемое значение равно числу элементов в списке (а не индексу последнего элемента). имяПути insert индекс элемент элемент ... Вставляет элементы непосредственно перед элементом, на который указывает аргумент индекс. Если аргумент индекс имеет значение end, то новые элементы вставляются в конец списка. Команда возвращает пустую строку. имяПути nearest y По заданному значению y-координаты в окне со списком возвращает индекс ближайшего к этому значению (видимого) элемента списка. имяПути scan параметр аргументы Осуществляет сканирование окна со списком. В зависимости от значения параметра может иметь две различные формы:

    имяПути scan mark x y

    Запоминает значение координаты x и текущее состояние окна со списком; используется в сочетании с последующими командами scan dragto. Обычно эта команда связана с нажатием клавиши ⌠Мыши■ на примитиве. Возвращает пустую строку. имяПути scan dragto x y Вычисляет разность между значением своих аргумента x и y и значениями аргументов x и y последней выполненной на данном примитиве команды scan mark. Затем переносит изображение примитива на расстояние, в 10 раз превышающее вычисленную разность. Команда обычно связана с событиями движения ⌠Мыши■ в примитиве и используется для скоростного перетаскивания списка в окне. Возвращает пустую строку.
    имяПути see индекс Выравнивает список в окне так, чтобы элемент с индексом индекс оказался видимым. Если этот элемент уже является видимым, то команда не производит никаких действий. Если указанный элемент находится возле края окна, то при прокрутке списка элемент оказывается возле того же края; в противном случае указанный элемент выводится в центре окна. имяПути selection параметр аргумент Производит размещение выделения в окне со списком. Команда может иметь одну из описанных ниже форм. имяПути selection anchor индекс Устанавливает опорную точку выделения на элемент, указанный аргументом индекс. Если индекс указывает на несуществующий элемент, то опорным становится элемент, ближайший к указанному. Опорная точка выделения является фиксированным концом выделения при движении ⌠Мыши■ с нажатой клавишей. На опорную точку выделения указывает индекс anchor. имяПути selection clear первый последний Отменяет выделение элементов между первым и последним. Вне этого интервала выделение не изменяется. имяПути selection includes индекс Возвращает ⌠1■, если элемент, указанный аргументом индекс, выделен, и ▒0▓ в противном случае. имяПути selection set первый последний Выделяет все элементы в промежутке между первым и последним; на выделение вне указанного интервала команда влияния не оказывает. имяПути xview аргументы Используется для запроса горизонтального положения информации, выведенной в окне примитива, и изменения этого положения. Команда может иметь одну из следующих форм:

    имяПути xview

    Возвращает список, состоящий из двух элементов. Каждый из элементов списка представляет собой вещественное число, заключенное между нулем и единицей; эта пара чисел описывает видимый в окне горизонтальный интервал. Так, например, если первое число равно ⌠.2■, а второе ⌠.6■, то 20% текста в окне со списком оказывается невидимой слева от окна, в окне выводится 40% информации, и еще 40% оказывается невидимой справа от окна. Те же значения передаются полосе прокрутки через параметр -xscrollcommand. имяПути xview индекс Переносит строку в поле ввода так, что самым левым символом в окне становится символ, положение которого указано аргументом индекс. Положения символов определяются исходя из ширины символа 0. имяПути xview moveto число Передвигает область видимости так, что слева от окна остается невидимой часть текста списка, указанная аргументом число. Число должно быть заключено между ▒0▓ и `1▓. имяПути xview scroll количество что Сдвигает выводимый в окне текст вправо или влево в соответствии со значениями аргументов. Количество должно быть целым числом, аргумент что может принимать значения units или pages или быть сокращением одного из этих слов. Если аргумент что принимает значение units, то сдвиг происходит на количество символов средней ширины (ширины символов 0). Если значением аргумента что является pages, то сдвиг осуществляется на количество полных экранов. Если количество отрицательно, то видимые символы сдвигаются вправо, в противном случае ≈ влево.
    имяПути yview аргументы Используется для запроса вертикального положения информации, выведенной в окне примитива, и изменения этого положения. Команда может иметь одну из следующих форм:
    имяПути yview Возвращает список, состоящий из двух элементов. Каждый из элементов списка представляет собой вещественное число, заключенное между нулем и единицей. Первый элемент списка задает положение в списке первого видимого в окне элемента (например, значение ⌠0.5■ указывает на середину списка). Второй элемент указывает положение в списке элемента, следующего непосредственно за последним видимым в окне. Те же значения передаются полосе прокрутки через параметр -xscrollcommand. имяПути yview индекс. Переносит содержимое окна со списком таким образом, чтобы элемент, заданный аргументом индекс, оказался в первой строчке окна. имяПути yview moveto число Переносит содержимое окна со списком таким образом, чтобы элемент, заданный аргументом число, оказался в первой строчке окна. Число должно быть заключено между ▒0▓ и `1▓. ▒0▓ указывает на первый элемент в списке, ⌠0.33■ указывает на элемент, отстоящий от начала списка на одну треть, и т.д. имяПути yview scroll количество что Сдвигает выводимый в окне текст вверх или вниз в соответствии со значениями аргументов. Количество должно быть целым числом, аргумент что может принимать значения units или pages или быть сокращением одного из этих слов. Если аргумент что принимает значение units, то сдвиг происходит на количество строчек. Если значением аргумента что является pages, то сдвиг осуществляется на количество полных экранов. Если количество отрицательно, то видимые символы сдвигаются вниз, в противном случае ≈ вверх.
    ПАРАМЕТРЫ ПО УМОЛЧАНИЮ При создании окна со списком Tk автоматически создает параметры класса, определяющие его поведение по умолчанию. Поведение окна со списком в значительной степени определяется значением параметра selectMode, задающим один из четырех режимов работы с выделением.

    В режиме выделения single или browse допустимо выделение не более одного элемента. В обоих режимах щелчок клавишей 1 ⌠Мыши■ на элементе приводит к его выделению и отмене всех остальных выделений. В режиме browse выделенный элемент можно также перетащить с помощью клавиши 1 ⌠Мыши■.

    В режимах выделения multiple или extended можно одновременно выделить несколько элементов, не обязательно идущих в списке подряд. В режиме multiple щелчок клавиши 1 ⌠Мыши■ на элементе переключает состояние его выделенности, не влияя на выделение остальных элементов. В режиме extended нажатие клавиши на элементе выделяет его, отменяет выделение всех остальных элементов и устанавливает опорную точку выделения на элемент под курсором ⌠Мыши■; если при этом тащить ⌠Мышь■ с нажатой клавишей 1, то выделение распространится на все элементы между опорным и элементом, находящимся под сдвинувшимся курсором ⌠Мыши■.

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

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

    В режиме extended выделенную область можно изменить нажатием клавиши 1 при нажатой клавише Shift; при этом выделенной становится вся область между опорной точкой и элементом под курсором ⌠Мыши■.

    В режиме extended нажатие клавиши 1 при нажатой клавише Control начинает выполнение операции переключения: опорная точка устанавливается на элемент под курсором ⌠Мыши■, а состояние его выделения меняется на противоположное. Выделение остальных элементов не изменяется. Если тащить ⌠Мышь■ с нажатой клавишей 1, то состояние выделения всех элементов между опорной точкой и курсором ⌠Мыши■ меняется на состояние выделения опорного элемента; выделение остальных элементов не изменяется.

    Если ⌠Мышь■ сдвигается с окна со списком при нажатой клавише 1, то информация в окне прокручивается в противоположном направлении. Прокрутка продолжается до тех пор, пока либо ⌠Мышь■ не вернется в область окна, либо будет достигнут конец списка.

    Для прокрутки можно использовать клавишу 2 ⌠Мыши■. Если ее нажать и протащить ⌠Мышь■ по списку, то содержимое списка будет прокручиваться в направлении движения ⌠Мыши■.

    При нажатии на клавиши Up или Down курсор окна (активный элемент) передвигается на одну строчку вверх или вниз. В режиме browse или extended новый активный элемент оказывается выделенным, а выделение всех остальных элементов отменяется. В режиме extended новый активный элемент становится опорной точкой выделения.

    В режиме extended клавиши Shift-Up и Shift-Down передвигают курсор окна на одну строчку вверх или вниз и расширяют область выделения новым активным элементом подобно тому, как это делает клавиша 1 ⌠Мыши■.

    Нажатие на клавиши Left или Right приводит к перемещению курсора ввода на ширину символа 0 влево или вправо.

    Нажатие на клавиши Control-Left и Control-Right приводит к прокрутке списка на ширину окна, также, как и нажатие на клавиши Control-Prior и Control-Next.

    Нажатие на клавиши Prior и Next приводит к прокрутке списка на одну страницу (на высоту окна) вверх или вниз.

    Нажатие на клавиши Home и End прокручивает список горизонтально до его левого или правого края соответственно.

    Нажатие на клавиши Control-Home устанавливает курсор окна на первый элемент списка, выделяет этот элемент и отменяет выделение всех остальных элементов.

    Нажатие на клавиши Control-End устанавливает курсор окна на последний элемент списка, выделяет этот элемент и отменяет выделение всех остальных элементов.

    В режиме extended нажатие на клавиши Control-Shift-Home расширяет выделение до первого элемента в списке, а на клавиши Control-Shift-End ≈ до последнего элемента в списке.

    В режиме multiple нажатие на клавиши Control-Shift-Home устанавливает курсор окна на первый элемента в списке, а на клавиши Control-Shift-End ≈ на последний элемент в списке.

    Клавиши пробела и Select выделяют активный элемент (курсор окна), как если бы на этом элементе была нажата клавиша1 ⌠Мыши■.

    В режиме extended нажатие на клавиши Control-Shift-пробел и Shift-Select расширяет выделение до активного элемента, как если бы на этом элементе была нажата клавиша 1 ⌠Мыши■ при нажатой клавише Shift.

    В режиме extended нажатие на клавиши Escape отменяет самое последнее выделение и восстанавливает предыдущее состояние выделение всех элементов в области выделения.

    Control-/ выделяет все элементы окна.

    Control-\ приводит к отмене текущего выделения (за исключением режима browse, где эта команда не приводит ни к какому результату).

    Клавиша F16, на многих станциях Sun обозначенная Copy, (или Meta-w) копирует выделение в примитиве в карман.

    Определяя новые параметры для отдельных примитивов или переопределяя параметры класса, поведение окна со списком можно изменить.

    lower
    Команда изменяет положение окна в очереди стека. СИНТАКСИС lower window ?belowThis? ОПИСАНИЕ
    Команда lower перемещает окно window в очереди стека либо ниже всех окон, имеющих одинаковый с window уровень иерархии, либо после одного из них, заданного аргументом belowThis. Окна, оказавшиеся выше данного окна, заслоняют его.  
     

    menu

      Создание примитива меню и управление им.
  • Синтаксис

  •  
  • Стандартные параметры

  •  
  • Дополнительные параметры примитива

  •  
  • Введение

  •  
  • Командные входы

  •  
  • Входы-разделители

  •  
  • Защелкивающиеся входы

  •  
  • Входы-переключатели

  •  
  • Каскадные входы

  •  
  • Входы ≈ ключи отрыва

  •  
  • Линейка меню

  •  
  • Специальные меню в линейке

  •  
  • Клоны

  •  
  • Команда примитива

  •  
  • Конфигурации меню

  •  
  • Ниспадающие меню в полосе меню

  •  
  • Ниспадающие меню в кнопках меню

  •  
  • Всплывающие меню

  •  
  • Меню-переключатели с кнопкой

  •  
  • Отрывные меню

  •  
  • Параметры по умолчанию
  • СИНТАКСИС

    menu имяПути параметры СТАНДАРТНЫЕ ПАРАМЕТРЫ
         
    -activebackground -disabledforeground  -background  -relief 
    -activeborderwidth  -borderwidth -font  -takefocus
     -activeforeground -cursor  -foreground
     
    Подробное описание этих параметров приведено в разделе options.
    ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА Имя параметра: -postcommand
    Имя в Базе: postCommand
    Класс в Базе: PostCommand
    Задает команду Tcl, которая должна выполняться при каждом выводе меню. Эта команда выполняется командой примитива post непосредственно перед выводом меню. В версии 8.0 операционной системы Macintosh и в Windows все команды системы меню выполняются перед выводом меню. Это объясняется ограничениями, накладываемыми конкретными системами управления меню данных платформ.
      Имя параметра:   -selectcolor
    Имя в Базе: selectColor
    Класс в Базе: Background


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

    Имя параметра:   -tearoff
    Имя в Базе: tearOff
    Класс в Базе: TearOff


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

    Имя параметра:     - tearoffcommand
    Имя в Базе: tearOffCommand
    Класс в Базе: TearOffCommand


    Если значение этого параметра не пустая строка, то оно задает команду, которая должна выполняться при каждом отрыве от меню. В действительности выполняемая команда состоит из указанной строки, за которой следуют имя меню и имя окна меню отрыва (отделенные от строки команды и друг от друга пробелами). Если, например, параметр имеет значение ⌠a b■ и в результате отрыва от меню .x.y должно быть создано новое меню .x.tearoff1, то будет выполнена команда ⌠a b .x.y .x.tearoff1■.
     

    Имя параметра: -title
    Имя в Базе: title
    Класс в Базе: Title
    Строка ≈ значение параметра задает имя окна, создаваемого при отрыве от данного меню. Если значением параметра служит NULL, то именем окна станет либо имя кнопки меню, либо содержимое элемента каскада, из которого выполняется данное меню.
      Имя параметра: -type
    Имя в Базе: type
    Класс в Базе: Type
    Параметр может принимать одно из значений menubar, tearoff или normal; это значение устанавливается при создании меню. При изменении значения меняется строка, возвращаемая конфигурационной базой данных, однако это не оказывает влияния на поведение примитива меню. Это свойство используется механизмом клонирования и обычно не применяется за пределами библиотеки Tk.
    ВВЕДЕНИЕ Команда menu создает новое окно (заданное аргументом имяПути) и превращает его в примитив меню. Детали изображения меню, такие как его цвета и шрифты, задаются с помощью описанных выше дополнительных параметров в командной строке или в базе данных параметров. Команда menu возвращает имя пути нового окна. В момент выполнения команды не должно быть окна с именем имяПути, однако его непосредственный предок должен существовать.

    Меню представляет собой примитив, предназначенный для вывода совокупности однострочных входов, разбитых на несколько колонок (быть может, одну). Входы бывают различных типов и имеют соответственно различные свойства. Входы различных типов могут содержаться в одном и том же меню. Вход меню (menu entry) ≈ совсем не то же самое, что примитив поля ввода (entry). Более того, вход меню не является отдельным примитивом ≈ все вместе они образуют примитив меню.

    При выводе вход меню может содержать до трех различных полей. Главное поле представляет собой метку входа; оно содержит строку текста, изображение или двуцветное изображение в зависимости от значения параметров входа -label, -bitmap и -image. Если для данного входа задан параметр -accelerator, то справа от метки появляется второе текстовое поле. Этот параметр обычно описывает совокупность клавиш, нажатие на которые приводит к тому же результату, что и выбор данного входа в меню. Третье поле представляет собой индикатор. Индикатор применяется только для защелкивающихся входов или переключателей. Он указывает, выделен или нет данный вход, и располагается слева от строки входа.

    При обычном использовании вход становится активным (при этом меняется вид строки), если на нем расположен курсор ⌠Мыши■. Если клавишу ⌠Мыши■ в таком положении отпустить, то вход будет выполнен. Результат выполнения зависит от типа входа. Подробное описание результатов приведено ниже при описании конкретных типов входов.

    Входы могут быть отключены (disabled); изображение такого входа тускнеет. Привязки меню по умолчанию блокируют активизацию и выполнение команды для отключенного входа. Отключенный вход может быть снова подключен, после чего его вновь можно активизировать и выполнять соответствующую команду.

    При изменении активного входа в меню в нем происходит виртуальное событие <<MenuSelect>>. В результате из меню можно запросить активный вход и предпринять какие-либо действия (например, вывести соответствующую контекстно-зависимую подсказку).

    КОМАНДНЫЕ ВХОДЫ Наиболее распространенным типом входа в меню является командный вход, который ведет себя подобно примитиву кнопки. При запуске командного входа выполняется команда Tcl, заданная параметром -command. ВХОДЫ-РАЗДЕЛИТЕЛИ Разделитель представляет собой вход, предназначенный для вывода горизонтальной разделительной черты. Разделитель нельзя сделать активным или выполнить, никакого поведения разделителя, отличного от вывода черты не предусмотрено. ЗАЩЕЛКИВАЮЩИЕСЯ ВХОДЫ Защелкивающийся вход ведет себя подобно защелкивающейся кнопке. При щелчке на таком входе происходит переключение из выделенного состояния в невыделенное и обратно. В выделенном состоянии в некоторую глобальную переменную (указанную параметром -variable) заносится значение, фиксированное параметром -onvalue; при отмене выделения в эту глобальную переменную заносится другое значение, фиксированное параметром -offvalue. Слева от метки защелкивающегося входа изображается квадратик-индикатор. Если вход выделен, то центральная часть индикатора окрашивается в цвет, указанный параметром -selectcolor для входа; в противном случае цвет индикатора совпадает с цветом фона меню. Если для данного входа задано значение параметра -command, то это значение интерпретируется как команда Tcl всякий раз при выделении входа. ВХОДЫ-ПЕРЕКЛЮЧАТЕЛИ Вход-переключатель ведет себя подобно примитиву переключателя. Входы переключателя разбиты на группы, причем в каждой группе выделенным может оказаться только один вход. При выделении конкретного входа в некоторую глобальную переменную (указанную параметром -variable) заносится значение, фиксированное параметром -value. В результате этого действия автоматически отменяется предыдущее выделение в той же группе. Любое изменение значения переменной, связанной с входом, автоматически приводит к отмене существующего выделения. Разбиение входов-переключателей на группы задается значениями связанных с ними переменных: два входа с одинаковыми значениями переменной принадлежат одной группе. Слева от метки входа-переключателя изображается ромб индикатора. Если вход выделен, то центральная часть индикатора окрашивается в цвет, указанный параметром -selectcolor для входа; в противном случае цвет индикатора совпадает с цветом фона меню. Если для данного входа задано значение параметра -command, то это значение интерпретируется как команда Tcl всякий раз при выделении входа. КАСКАДНЫЕ ВХОДЫ Каскадному входу отвечает новое меню (заданное параметром -menu). Каскадные входы позволяют строить ниспадающие меню. Команда примитива postcascade позволяет изобразить ассоциированное меню непосредственно рядом с каскадным входом или удалить выведенное меню. Для обеспечения корректности переключения меню необходимо, чтобы меню, ассоциированное с входом, было непосредственным потомком того меню, элементом которого данный вход является.

    Каскадный вход выводит ассоциированное меню с помощью команды Tcl вида:

    меню post x y
     

    где меню представляет собой имя пути ассоциированного меню, а x и y ≈ это координаты верхнего правого угла окна каскадного входа относительно корневого окна. В системе Unix меню нижнего уровня стирается с помощью команды Tcl.


    меню unpost
     

    где меню представляет собой имя пути ассоциированного меню. На других платформах стирание меню осуществляется их собственными средствами.


    Если для данного входа задано значение параметра -command, то это значение интерпретируется как команда Tcl всякий раз при выделении входа. В системе Windows данная возможность не поддерживается.

    ВХОДЫ ≈ КЛЮЧИ ОТРЫВА Ключ отрыва появляется в верхней части меню, если параметр tearOff имеет значение истина. В отличие от входов других типов его нельзя создать командой примитива add или удалить командой примитива delete. При создании ключа отрыва он изображается в виде пунктирной горизонтальной черты в верхней части окна. Привязки по умолчанию создают при щелчке на ключе отрыва оторванную копию меню и всех подчиненных ему меню. ЛИНЕЙКА МЕНЮ Любое меню можно использовать в качестве полосы меню для окна верхнего уровня (синтаксис см. в описании команды toplevel ). В системе Macintosh каскадные элементы меню появляются в полосе меню в верхней части окна, как только соответствующее окно верхнего уровня оказывается поверх остальных окон. В системах Windows и Unix эти элементы меню изображаются в полосе меню в верхней части окна. Поведение меню определяется особенностями интерфейса каждой из платформ. Для каждого меню, используемого в качестве полосы меню, создается его копия (clone menu). Подробное описание приведено ниже (см. "Клоны"). СПЕЦИАЛЬНЫЕ МЕНЮ В ЛИНЕЙКЕ Некоторые меню в полосе меню будут обрабатываться особым образом. В системе Macintosh обеспечен доступ к специальным меню Apple и Help. В каждом окне системы Windows обеспечен доступ к меню Windows System. В системе X Windows предоставляется специальное меню подсказки, выравненное вправо. Во всех случаях эти меню создаются посредством команды, имя которой состоит из имени команды меню в полосе меню, к которму приписывается имя специального меню. Так, для полосы меню с именем .menubar на Macintosh именами специальных меню будут .menubar.apple и .menubar.help; в Windows ≈ .menubar.system; в X Windows именем меню подсказки будет .menubar.help.

    Встречая меню Apple в системе Macintosh, Tk выводит его первые элементы на экран всякий раз, когда окно, содержащее полосу меню оказывается поверх остальных окон. Это меню является первым, которое видит пользователь, а его заголовком служит логотип Apple. После всех Tk-определенных элементов следует разделитель, за которым идут все элементы из папки пользователя Apple Menu Items. Так как используемая System процедура определения меню отлична от используемой в Tk и API системы не поддерживают всех возможностей меню Tk, в заголовке меню выводится только текст заголовка. Никаких дополнительных сведений, изображений, двуцветных изображений или цветов не выводится. Кроме того, ключ отрыва имеет вид ⌠TearOff■.

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

    Встречая меню System в системе Windows, Tk добавляет содержимое этого меню к системному меню, к которому привязана данная полоса меню. В этом меню имеется картинка, изображающая клавишу пробела; ее можно запустить с помощью ⌠Мыши■ или нажав клавиши Alt+Spacebar. Ограничения Windows API не позволяют вывести в системном меню различные шрифты, цвета, изображения или двуцветные изображения, а также ключи отрыва.

    Встречая меню Help в системе X Windows, Tk делает его последним в полосе меню и выравнивает по правому краю.

    КЛОНЫ При использовании меню в качестве полосы меню в окне верхнего уровня, а также при отрыве меню создается его копия. Копия сама является примитивом меню, но она ≈ непосредственный потомок исходного меню. Изменения конфигурации исходного меню распространяются и на копию. Кроме того, все каскады, на которые есть указатели, также копируются, что обеспечивает корректное переключение меню. Копии уничтожаются, если удаляется ключ отрыва или полоса меню, а также при уничтожении оригинала. КОМАНДА ПРИМИТИВА Команда menu создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид:

    имяПути параметр арг арг ...

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

    число

    Задает номер входа. Самый верхний вход имеет номер 0, следующий за ним ≈ номер 1 и т.д. active Задает вход, который активен в настоящий момент. Если активного входа нет, то это значение параметра эквивалентно значению none. Слово active нельзя сокращать. end Указывает самый нижний вход в меню. Если в меню нет ни одного входа, то это значение параметра эквивалентно значению none. Слово end нельзя сокращать. last Совпадает с end. none Указывает на ⌠никакой■ вход. Чаще всего используется совместно с параметром activate для дезактивации всех активных входов в меню. Слово none нельзя сокращать. @число В этом случае число интерпретируется как значение y-координаты в окне меню; указывает на вход, ближайший к данной y-координате. Так, например, ⌠@0■ указывает на самый верхний вход в окне. образец

    Если индекс не подходит ни под один из указанных видов, то используется поиск индекса по образцу. Сравнение метки входа с образцом выполняется последовательно сверху вниз, пока не встретится подходящая метка. При сравнении используются правила Tcl_StringMatch.

    Примитивы меню допускают следующие команды:

    имяПути activate индекс

    Делает активным вход, указанный параметром индекс и соответственно меняет вид строки входа на экране. Всякий вход, бывший активным в момент выполнения команды, деактивизируется. Если индекс имеет значениеnone или если указанный этим параметром вход отключен, то по окончании работы команды в меню не будет активных входов. Возвращает пустую строку. имяПути add тип параметр значение параметр значение Добавляет новый вход на верхушку меню. Аргумент тип задает вид нового входа; он может принимать значения cascade, checkbutton, command, radiobutton (эти значения допускают однозначные сокращения). Дополнительные аргументы могут задавать значения следующих параметров: -activebackground значение Задает цвет фона для вывода данного входа в активном состоянии. Если значением служит пустая строка (как, например, по умолчанию), то в качестве цвета фона берется значение параметра activeBackground для всего меню. Если значение переменной tk_strictMotif требует проверки согласования со стандартом Motif, то значение данного параметра игнорируется и вместо него используется значение параметра -background. Для входа-разделителя и ключа отрыва данный параметр недоступен. -activeforeground значение Задает цвет переднего плана для вывода данного входа в активном состоянии. Если значением служит пустая строка (как, например, по умолчанию), то в качестве цвета фона берется значение параметраactiveForeground для всего меню. Для входа-разделителя и ключа отрыва данный параметр недоступен. -accelerator значение Задает строку, которую следует выводить в правой части входа. Обычно описывает комбинацию клавиш, на которые следует нажать, чтобы выполнить те же действия, что и при обращении к данному входу. Для входа-разделителя и ключа отрыва данный параметр недоступен. -background значение Задает цвет фона для вывода данного входа в нормальном (не активном и не отключенном) состоянии. Если значением служит пустая строка (как, например, по умолчанию), то в качестве цвета фона берется значение параметра background для всего меню. Для входа-разделителя и ключа отрыва данный параметр недоступен. -bitmap значение Задает двуцветное изображение, выводимое в меню вместо текстовой метки. Может принимать любое значение, воспринимаемое командой Tk_GetBitmap. Данный параметр подавляет параметр -label, однако если его значением является пустая строка, то в окне выводится текстовая метка. Параметр -image, если он задан, подавляет параметр -bitmap. Для входа-разделителя и ключа отрыва данный параметр недоступен. -columnbreak значение Если значение параметра равно ▒0▓, то новый вход выводится после предыдущего входа. Если значение равно `1▓, то новый вход выводится вверху нового столбца меню. -command значение Задает команду Tcl, которую следует выполнить при вызове данного входа. Для входа-разделителя и ключа отрыва данный параметр недоступен. -font значение Задает шрифт, используемый при выводе метки входа и строки горячих клавиш. Если значением параметра является пустая строка (как, например, по умолчанию), то используется значение параметра fontдля всего меню. Для входа-разделителя и ключа отрыва данный параметр недоступен. -foreground значение Задает цвет переднего плана для вывода данного входа в нормальном (не активном и не отключенном) состоянии. Если значением служит пустая строка (как, например, по умолчанию), то в качестве цвета фона берется значение параметра foreground для всего меню. Для входа-разделителя и ключа отрыва данный параметр недоступен. -hidemargin значение Указывает, следует ли при выводе данного входа выводить стандартные боковые поля. Такая возможность полезна при создании различных палитр с картинками (цветовые палитры, палитры образцов и т.д.). Значение `1' указывает на то, что поля должны быть спрятаны, при нулевом значении параметра они используются. -image значение Задает изображение, выводимое в меню вместо текстовой метки или двуцветного изображения. Изображение должно быть создано ранее командой image create. Данный параметр подавляет параметры -label, и -bitmap, однако если его значением является пустая строка, то в окне выводится текстовая метка или двуцветное изображение. Для входа-разделителя и ключа отрыва данный параметр недоступен. -indicatoron значение Доступно только для защелкивающихся входов и входов-переключателей. Значение является булевским и указывает, следует или нет выводить индикатор входа. -label значение Задает текстовую строку, которая служит меткой-идентификатором входа. Для входа-разделителя и ключа отрыва данный параметр недоступен. -menu значение Данный параметр доступен только для каскадных входов. Задает имя пути подменю, ассоциированного с данным входом. Подменю должно быть непосредственным потомком данного меню. -offvalue значение Доступен только для защелкивающихся входов. Задает значение, которое следует записать в переменную входа при отмене его выделения. -onvalue значение Доступен только для защелкивающихся входов. Задает значение, которое следует записать в переменную входа при его выделении. -selectcolor значение Доступен только для защелкивающихся входов и входов-переключателей. Задает значение, которое следует записать в переменную входа при его выделении. -selectimage значение Доступен только для защелкивающихся входов и входов-переключателей. Задает изображение, которое следует выводить в поле входа при его выделении (замещает параметр -image). Изображение должно быть создано ранее командой image create. Если параметр -image не задан, то данный параметр игнорируется. -state значение Задает одно из трех состояний входа: normal, active или disabled. В нормальном состоянии при выводе входа используются значения параметров foreground для всего меню и background для входа или для всего меню. Обычно вход становится активным при попадании на него курсора. В активном состоянии при выводе входа используются значения параметров activeForeground для всего меню и activebackground для входа. В отключенном (disabled) состоянии вход становится безответным: привязки по умолчанию не позволяют активизировать его или вызвать соответствующую ему команду Tcl. При выводе входа в этом случае используются значения параметров disabledForeground для всего меню и background для входа. Для входа-разделителя данный параметр недоступен. -underline значение Задает целочисленный индекс символа в метке, который следует подчеркнуть. Значение этого индекса используется, в том числе, привязками по умолчанию для осуществления переключения с помощью клавиатуры. Значение ▒0▓ указывает на первый символ в строке, `1▓ ≈ на второй и т.д. Если в поле входа выводится изображение или двуцветное изображение, то данный параметр игнорируется. Для входа-разделителя и ключа отрыва данный параметр недоступен. -value значение Доступен только для входа-переключателя. Задает значение, которое следует записать в переменную входа при его выделении. Если значением параметра является пустая строка, то в переменную заносится значение параметра -label. -variable значение Доступен только для защелкивающегося входа и входа-переключателя. Задает имя глобальной переменной, которую следует установить при выделении входа. Для защелкивающегося входа значение переменной устанавливается также при отмене его выделения. Для входа-переключателя изменение значения переменной приводит к отмене текущего выделения. Команда примитива add возвращает пустую строку.

    имяПути cget параметр

    Возвращает текущее значение параметра конфигурации с именем параметр. Параметрможет быть любым из параметров команды menu. имяПути clone новоеИмяПути типКопии Создает копию текущего меню с именем новоеИмяПути. Копия является отдельным самостоятельным меню, однако любые изменения в ней приводят к таким же изменениям оригинала и наоборот. Аргумент типКопии можетпринимать значения normal, menubar и tearoff. Команду не следует исполнять вне библиотеки Tk. Подробную информацию см. "Клоны". имяПути configure параметр значение параметр значение ... Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения. В этом случае команда возвращает пустую строку. Параметр может быть любым из параметров команды menu. имяПути delete индекс1 индекс2 Удаляет все входы между входами, указанными аргументами индекс1 и индекс2, включая оба эти входа. Ключи отрыва при этом не удаляются ≈ для их удаления следует поменять значение параметра tearOff. имяПути entrycget индекс параметр Возвращает текущее значение параметра конфигурации для входа, заданного аргументом индекс. Параметрможет принимать любые значения, воспринимаемые командой примитива add. имяПутиentryconfigure индекс параметры Команда аналогична команде configure; отличие состоит в том, что она относится к параметрам отдельного входа, тогда как команда configure применима к параметрам меню в целом. Параметры могут принимать любые значения, воспринимаемые командой примитива add. Если параметры заданы, то им присваиваются вновь заданные и команда возвращает пустую строку. Если параметры не заданы, то команда возвращает список текущих значений всех параметров для каждого из входов, указанных аргументом индекс (формат списка приведен в Tk_ConfigureInfo). имяПути index индекс Команда возвращает числовое значение индекса, заданного аргументом индекс или значение none, если значением аргумента было none. имяПути insert индекс тип параметр значение параметр значение Команда аналогична команде примитива add; отличие состоит в том, что команда insert вставляет новый вход непосредственно перед входом, на который указывает аргумент индекс, а не в конец меню. Если в меню есть ключ отрыва, то вставка входов перед ним невозможна.


    имяПути invoke индекс

    Выполняет действие, ассоциированное с данным входом меню. Подробное описание выполняемых действий приведено выше при описании конкретных типов входов. Если с данным входом ассоциирована какая-нибудь команда Tcl, то команда invoke возвращает результат выполнения этой команды Tcl. В противном случае результатом служит пустая строка. Замечание: при исполнении данной команды меню не пропадает автоматически ≈ это результат действия привязок по умолчанию перед исполнением команды invoke. имяПути post x y Обеспечивает вывод меню на экран в месте с координатами x и y относительно корневого окна. При необходимости эти координаты корректируются так, чтобы меню на экране было видно. Обычно команда возвращает пустую строку. Если задан параметр postCommand, то его значение интерпретируется как Tcl скрипт, который и исполняется перед выполнением команды post; в этом случае команда примитива post возвращает результат данного скрипта Tcl. Если при выполнении скрипта возникла ошибка, то post возвращает сообщение об этой ошибке и меню не выводится. имяПути postcascade индекс Выводит подменю, вызываемое каскадным входом, указанным аргументом индекс, и стирает ранее выведенное подменю. Если аргумент индекс не указывает на каскадный вход или если меню с именем имяПути не выведено, то командаpostcascade не производит никаких действий за исключением стирания ранее выведенных подменю. имяПути type индекс Возвращает тип входа, указанного аргументом индекс. Этот тип задается аргументом тип при создании входа командой примитива add (например, command, separator или tearoff для ключа отрыва). имяПути unpost Стирает окно с экрана. Если было выведено каскадное меню нижнего уровня, то стирает это меню. Возвращает пустую строку. На платформах Windows и Macintosh эта команда не работает, так как там имеются собственные системы управления окнами. имяПути yposition индекс Возвращает десятичное значение y-координаты в окне меню верхнего пиксела поля входа, заданного аргументом индекс.
    КОНФИГУРАЦИИ МЕНЮ  
    Привязки по умолчанию обеспечивают четыре различных способа использования меню:

    Ниспадающие меню в полосе меню

    Наиболее часто встречающийся случай. Сначала создается примитив меню, который станет полосой меню. Затем к этому меню добавляются каскадные входы, описывающие нужные ниспадающие меню. Затем создаются все ниспадающие меню. Когда все это проделано, нужно задать значение параметра -menu в команде примитива верхнего уровня. Подробное описание см. п. toplevel.

    Ниспадающие меню в кнопках меню

    Это альтернативный способ создания полосы меню. Сначала создается примитив кнопки меню для каждого меню верхнего уровня (обычно цепочка кнопок располагается последовательно в полосе меню окна). Кроме того следует создать все меню верхнего уровня и подчиненные им меню и связать их вместе с помощью параметра -menu в кнопках меню и каскадных входах меню. Меню верхнего уровня должно быть непосредственным потомком кнопки меню, а каждое подменю должно быть непосредственным потомком меню, которое на него ссылается. После того, как это сделано, привязки по умолчанию позволяют пользователю переходить от одного меню к другому и обращаться к дереву меню через кнопку меню.

    Всплывающие меню

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

    Меню-переключатели с кнопкой

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

    Отрывные меню

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

    ПАРАМЕТРЫ ПО УМОЛЧАНИЮ При создании меню Tk автоматически создает параметры класса, определяющие следующее поведение примитива по умолчанию:

    При попадании курсора ⌠Мыши■ в меню вход, на котором находится курсор, становится активным; при перемещении курсора по меню соответственно меняется и активный вход.

    Если курсор ⌠Мыши■ покидает меню, то все входы в нем деактивизируются за исключением случая, когда курсор перемещается в каскадное подменю.

    При отпускании клавиши ⌠Мыши■ на меню активный вход (если таковой имеется) исполняется. При этом меню стирается за исключением случая, когда это оторванное меню.

    Нажатие на клавиши Space или Return приводят к исполнению активного входа и стиранию меню.

    Если одна из букв в поле входа подчеркнута с помощью параметра -underline, то нажатие на эту букву (или ее эквивалент на верхнем или нижнем регистре) приводит к исполнению входа и стиранию меню.

    Нажатие на клавишу Escape приводит к отмене текущего выделения. Меню при этом стирается, если только это не оторванное меню.

    Нажатие на клавиши Up или Down приводит к активизации входа, примыкающего к текущему активному входу сверху или снизу. Если достигнут конец меню, то происходит перескок на противоположный его конец.

    Нажатие на клавишу Left приводит к переходу на соседнее слева меню. Если текущее меню представляет собой каскадное подменю, то это каскадное подменю стирается и текущим входом в меню становится каскадный вход в его непосредственном предке. Если текущее меню представляет собой меню верхнего уровня, выведенное кнопкой меню, то текущая кнопка меню стирается и выводится соседняя слева кнопка меню. В остальных случаях нажатие на эту клавишу не приводит ни к какому результату. Порядок кнопок меню слева направо определяется их порядком в стеке: Tk считает нижнюю кнопку меню (первой попавшую в стек) самой левой.

    Нажатие на клавишу Right приводит к переходу на соседнее справа меню. Если текущим является каскадный вход, то выводится соответствующее каскадное подменю и текущий вход становится первым в этом подменю. В противном случае, если текущее меню было выведено конпкой меню, то текущая кнопка меню стирается, а вместо нее выводится соседняя с ней справа кнопка меню.

    Отключенные входы меню остаются безответными: их нельзя сделать активными и они не реагируют на нажатие и отпускание клавиш ⌠Мыши■.

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

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

     
     
    message
     
    Создание примитива сообщения и управление им.
     
  • Синтаксис
  • Стандартные параметры
  • Дополнительные параметры примитива
  • Описание
  • Команда примитива
  • Параметры по умолчанию
  • СИНТАКСИС message имяПути параметры СТАНДАРТНЫЕ ПАРАМЕТРЫ
       
    -anchor -font -highlightthickness
    -takefocus -background  -foreground
    -padx -text -borderwidth
    -highlightbackground -pady -textvariable
    -cursor -highlightcolor -relief
    -width    
    Подробное описание этих параметров приведено в разделе options. ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА Имя параметра: -aspect
    Имя в Базе: aspect
    Класс в Базе: Aspect


    Целое число, указывающее желаемые пропорции текста. Его значение равно 100*ширина/высота. Значение `100▓ означает, что ширина текста должна равняться его высоте, значение `200▓ ≈ что текст должен быть вдвое шире по сравнению с высотой, значение `50▓ ≈ что его высота должна быть вдвое больше ширины и т.д. Используется для определения длины строки, если не задан параметр width. Значение по умолчанию равно `150▓.
     

    Имя параметра: -justify
    Имя в Базе: justify
    Класс в Базе: Justify

    Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width


    Задает желаемую ширину окна (в любом виде, приемлемом для Tk_GetPixels). Если значение параметра положительно, то параметр aspect игнорируется, а параметр width задает длину строки. Если значение параметра неположительно, то длина строки определяется параметром aspect.

    ОПИСАНИЕ Команда message созадает новое окно (задаваемое аргументом имяПути) и превращает его в примитив сообщения. Детали изображения сообщения, такие как его цвета, шрифт, текст и объемный вид задаются с помощью описанных выше дополнительных параметров. Команда message возвращает аргумент имяПути. В момент выполнения этой команды не должно существовать окна с именем имяПути, но должен существовать его предок.

    Сообщение представляет собой примитив, предназначенный для вывода строки текста. У примитива сообщения есть три специальных свойства. Во-первых, он разбивает строку сообщения на строчки, чтобы обеспечить заданные пропорции окна. Перевод строки осуществляется, по возможности, на границах слов (если в строку не помещается ни одного целого слова, то слово разбивается на несколько строк). Для переноса строки в нее вставляются символы перевода строки; их можно использовать, например, для вывода пустых строчек на экран.

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

    Третье свойство примитива сообщения состоит в том, что он специальным образом обрабатывает управляющие символы и непечатные символы. Символы табуляции заменяются пробелами, число которых равно расстоянию до ближайшего кратного 8-ми символам. Символы перевода строки вызвают переход на новую строку. Другие управляющие символы (код ASCII которых меньше 0x20) и символы, не определенные в шрифте сообщения, выводятся в виде последовательности из четырех символов \xhh, где hh ≈ это две шестнадциатиричные цифры, представляющие собой ASCII код данного символа. В том редком случае, когда в шрифте отсутствуют некоторые из символов `0123456789abcdef\x' управляющие символы и неопределенные символы вообще не выводятся.

    КОМАНДА ПРИМИТИВА Команда message создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

    имяПути параметр арг арг ...

    Параметр и аргументы уточняют поведение команды. Примитивы сообщения допускают следующие формы команды:

    имяПути cget параметр

    Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды message. имяПути configure параметр значение параметр значение ... Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды message.
    ПАРАМЕТРЫ ПО УМОЛЧАНИЮ При создании сообщения параметры по умолчанию отсутствуют: сообщения предназначены только для вывода текста.
    option
    Команда добавляет/получает параметры окон в/из базы данных параметров окон. СИНТАКСИС option add pattern value ?priority?

    option clear

    option get window name class

    option readfile fileName ?priority?

    ОПИСАНИЕ Команда позволяет добавить в базу данных параметров окон новые значения, считать из нее значения указанных параметров, очистить базу или добавить в базу данные из указанного файла стандартного формата. Аргумент pattern задает конкретный параметр и состоит из имен параметров и/или классов. Аргумент value содержит значение параметра. Аргумент fileName задает файл со значениями параметров. Необязательный аргумент priority указывает уровень приоритета для ввода параметра.
    options
    Приведено описание стандартных параметров примитивов.

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

    ОПИСАНИЕ options ≈ стандартные параметры, поддерживаемые примитивами

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

    В приводимом ниже описании строка ⌠Имя Параметра■ указывает имя переключателя в командах класса и командах примитивов configure, предназначенных для установки значения параметра. Если, например, в строке ⌠Имя параметра■ указано имя -foreground и имеется примитив .a.b.c, то с помощью команды

    .a.b.c configure -foreground black

    можно присвоить значение black параметру -foreground примитива .a.b.c. Для имен параметров можно использовать сокращения, сохраняющие однозначность интерпретации имени. В поле ⌠Имя в Базе■ приводится имя параметра в базе X-ресурсов (например, в файле .Xdefaults). В поле ⌠Класс в Базе■ приводится имя класса базы в файле X-ресурсов (например, в файле .Xdefaults).
     

    Имя параметра: -activebackground
    Имя в Базе: activeBackground
    Класс в Базе: Foreground


    Задает цвет фона при изображении активных элементов. Элемент (примитив или его часть) активен, если на нем находится курсор ⌠Мыши■ и нажатие на клавишу ⌠Мыши■ вызывает некоторое действие. Если установлено значение переменной tk_strictMotif, то значение указанного параметра игнорируется и используется обычный цвет фона. Для некоторых элементов в системах Windows и Macintosh установленный цвет активизируется только при щелчке клавиши 1 на элементе.
     

    Имя параметра: -activedorderwidth
    Имя в Базе: activeBorderWidth
    Класс в Базе: BorderWidth


    Задает неотрицательное значение ширины трехмерного бордюра, окружающего активные элементы. Определение активных элементов приведено выше. Значение может быть задано в любом виде, воспринимаемом командой Tk GetPixels. Обычно этот параметр доступен только для примитивов, отображающих более одного элемента одновременно (меню, а не кнопки).
     

    Имя параметра: -activeforeground
    Имя в Базе: activeForeground
    Класс в Базе: Background


    Задает цвет изображения активного элемента. Определение активных элементов приведено выше.
     

    Имя параметра: -anchor
    Имя в Базе: anchor
    Класс в Базе: Anchor


    Задает способ отображения информации (типа текст или bitmap) в примитиве. Должен принимать одно из значений n, ne, e, se, s, sw, w, nw или center,которые указывают на стороны света. Например, значение nw указывает на необходимость такого отображения информации, что ее левый верхний угол совпадает с левым верхним уровнем примитива.
     

    Имя параметра: -background or -bg
    Имя в Базе: background
    Класс в Базе: Background


    Задает нормальный цвет фона при отображении примитива.
     

    Имя параметра: -bitmap
    Имя в Базе: bitmap
    Класс в Базе: Bitmap


    Задает информацию типа bitmap в любом виде, приемлемом для Tk GetBitMap для отображения в примитиве. Другие параметры, вроде anchor и justify, уточняют способ отображения информации типа bitmap. Обычно при задании этого параметра значения остальных параметров, задающих способ отображения текстовой информации, игнорируются. Для восстановления возможности вывода текстовой информации в примитиве следует задать значение параметра bitmap в виде пустой строки. Задание параметра imageподавляет параметр bitmap в примитивах, использующих оба эти параметра.
     

    Имя параметра: -borderwidth or -bd
    Имя в Базе: borderWidth
    Класс в Базе: BorderWidth


    Задает неотрицательное значение ширины трехмерного бордюра, окружающего изображение примитива (при выводе такого бордюра; необходимость его вывода обычно указывается параметром relief). То же значение может быть использовано при имитации трехмерной графики внутри примитива. Значение параметра может быть любым из тех, что приемлемы для Tk GetPixels.
     

    Имя параметра: -cursor
    Имя в Базе: cursor
    Класс в Базе: Cursor


    Задает форму курсора ⌠Мыши■ на примитиве. Значение параметра должно быть одним из значений, которые перечислены в файле /usr/X11R6/unclude/X11/cursorfont.h, например, X_cursor, arrow, boat, clock, cross, то есть можно указывать любое значение их данного файла, в котором нужно опустить первые три символа ⌠XC_■.

     
    Имя параметра: -disabledforeground
    Имя в Базе: disabledForeground
    Класс в Базе: DisabledForeground
    Задает цвет переднего плана для изображения недоступного элемента. При вводе пустой строки (типичная ситуация для монохромного дисплея) недоступные элементы изображаются обычным цветом, однако их изображение делается более тусклым за счет штриховки.
      Имя параметра:   -exportselection
    Имя в Базе: exportSelection
    Класс в Базе: ExportSelection
    Указывает, должен ли выбранный элемент в примитиве входить также и в X-выборку. Значение параметра должно быть допустимым аргументом функции Tcl GetBoolean, скажем true, false, 0, 1, yes или no. При экспорте выбранного элемента выборка в примитиве отменяет текущую X-выборку; выборка за пределами примитива отменяет текущую выборку в примитиве. При наличии в примитиве выбранного элемента примитив отзывается на запросы поиска выбранных элементов. По умолчанию примитивы обычно экспортируют выбранные элементы.  
    Имя параметра:    -font
    Имя в Базе: font
    Класс в Базе: Font


    Задает шрифт для отображения текста внутри примитива. Синтаксис имени шрифта описан в команде font. Спаисок доступных шрифтов можно получить команой xlsfonts.
     

    Имя параметра:     -foreground или -fg
    Имя в Базе: foreground
    Класс в Базе: Foreground


    Задает нормальный цвет переднего плана примитива.
     

    Имя параметра: -highlightbackground
    Имя в Базе: highlightBackground
    Класс в Базе: HighlightBackground


    Задает цвет яркого прямоугольника обрамляющего примитив, находящийся вне фокуса ввода.
     

    Имя параметра:   -highlightcolor
    Имя в Базе: highlightColor
    Класс в Базе: HighlightColor
    Задает цвет яркого прямоугольника обрамляющего примитив, находящийся в фокусе ввода.
      Имя параметра:     -highlightthickness
    Имя в Базе: highlightThickness
    Класс в Базе: HighlightThickness


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

     
    Имя параметра: -image
    Имя в Базе: image
    Класс в Базе: Image
    Задает изображение, которое должно быть выведено в примитиве, созданном командой image create. Обычно при задании параметра imageзначения других параметров, задающих текстовые или bitmap данные для вывода в примитиве, подавляются. Для восстановления возможности вывода текстовых или bitmap данных следует задать пустое значение параметра image.
      Имя параметра: -insertbackground
    Имя в Базе: insertBackground
    Класс в Базе: Foreground


    Задает цвет фона поля, на котором установлен курсор ввода. Этот параметр подавляет цвет нормального фона примитива (или фона выбранного элемента, если курсор ввода оказался на выбранном элементе).
     

    Имя параметра: -insertborderwidth
    Имя в Базе: insertBorderWidth
    Класс в Базе: BorderWidth


    Задает неотрицательное значение ширины трехмерного бордюра вокруг курсора ввода. Значение параметра должно быть допустимым аргументом функции Tk GetPixels.
     

    Имя параметра:   -insertofftime
    Имя в Базе: insertOffTime
    Класс в Базе: OffTime
    Задает длину промежутка времени, в течение которого курсор ввода находится в режиме ⌠off■ (неотрицательное целое значение в миллисекундах) на протяжении одного цикла мигания. Если введенное значение равно нулю, то курсор не мигает: он всегда находится в режиме ⌠on■.  
    Имя параметра:    -inserontime
    Имя в Базе: insertOnTime
    Класс в Базе: OnTime
    Задает длину промежутка времени, в течение которого курсор ввода находится в режиме ⌠on■ (неотрицательное целое значение в миллисекундах) на протяжении одного цикла мигания.
      Имя параметра:   -insertwidth
    Имя в Базе: insertWidth
    Класс в Базе: InsertWidth


    Задает полную ширину курсора ввода. Значение параметра должно быть допустимым аргументом функции Tk GetPixels. Если (с помощью параметра insertBorderWidth) задана ширина бордюра, то бордюр будет располагаться внутри отведенной ширины курсора,
     

    Имя параметра:   -jump
    Имя в Базе: jump
    Класс в Базе: Jump


    Задает тип изменения значения примитива для примитивов, поддерживающих полосу прокрутки. Значение параметра должно быть допустимым булевским аргументом функции Tk GetBoolean. При значении параметра false значения примитива изменяются непрерывно. При значении параметра true значение примитива не меняется до окончания движения бегунка и отпускания клавиши ⌠Мыши■. В этот момент происходит установка нового значения (⌠скачок■, в отличие от непрерывного изменения).
     

    Имя параметра:   -justify
    Имя в Базе: justify
    Класс в Базе: Justify


    Описывает способ выравнивания текста, состоящего из нескольких строк, в окне примитива. Может принимать значения left, center или right. Left означает, что выравниваются левые концы строк, centerих середины, rightправые концы.
     

    Имя параметра:   -orient
    Имя в Базе: orient
    Класс в Базе: Orient


    Указывает ориентацию примитива, допускающего различные ориентации (так, полоса прокрутки может быть расположена горизонтально или вертикально). Может принимать значения horizontal или vertical, а также их сокращения.
     

    Имя параметра:   -padx
    Имя в Базе: padX
    Класс в Базе: Pad


    Неотрицательное значение, указывающее размер запрашиваемого дополнительного пространства для примитива в X-направлении. Значение параметра должно быть допустимым аргументом функции Tk GetPixels. При подсчете необходимого размера окна эта величина добавляется к обычному размеру, определяемому суммированием всех размеров всех его деталей. Если программа вывода в состоянии удовлетворить выданный запрос, то в правой и/или левой части окна примитива появляется дополнительное пространство. В большинстве случаев это пространство используется только для расположения там текста; при выводе bitmap-данных или изображений оно игнорируется.
     

    Имя параметра:     -pady
    Имя в Базе: padY
    Класс в Базе: Pad


    Неотрицательное значение, указывающее размер запрашиваемого дополнительного пространства для примитива в Y-направлении. Значение параметра должно быть допустимым аргументом функции Tk GetPixels. При подсчете необходимого размера окна эта величина добавляется к обычному размеру, определяемому суммированием всех размеров всех его деталей. Если программа вывода в состоянии удовлетворить выданный запрос, то в правой и/или левой части окна примитива появляется дополнительное пространство. В большинстве случаев это пространство используется только для расположения там текста; при выводе bitmap-данных или изображений оно игнорируется.
     

    Имя параметра:   -relief
    Имя в Базе: relief
    Класс в Базе: Relief


    Задает тип трехмерной графики в примитиве. Допустимы значения raised, sunken, flat, ridge, solid или groove. Значение указывает на способ размещения внутренней части окна по отношению к фону. Например, значение raised указывает, что внутренняя часть окна должна выступать из экрана.
     

    Имя параметра:   -repeatdelay
    Имя в Базе: repeatDelay
    Класс в Базе: RepeatDelay


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

    Имя параметра: -repeatinterval
    Имя в Базе: repeatInterval
    Класс в Базе: RepeatInterval


    Используется в паре с repeatDelay: при установлении режима автоматического повторения этот параметр задает длину промежутка времени между автоматическими повторениями.
     

    Имя параметра:   -selectbackground
    Имя в Базе: selectBackground
    Класс в Базе: Foreground


    Задает цвет фона при отображении выбранных элементов.
     

    Имя параметра:   -selectborderwidth
    Имя в Базе: selectBorderWidth
    Класс в Базе: BorderWidth
    Задает ширину трехмерного бордюра вокруг выбранных элементов. Допустимы любые значения, воспринимаемые командой Tk GetPixels.
      Имя параметра:   -selectforeground
    Имя в Базе: selectForeground
    Класс в Базе: Background


    Задает цвет переднего плана для изображения выбранных элементов.
     

    Имя параметра:   -setgrid
    Имя в Базе: setGrid
    Класс в Базе: SetGrid
    Задает булевское значение, определяющее, управляет ли данный примитив масштабирующей сеткой своего окна верхнего уровня. Обычно этот параметр используется в текстовых примитивах с естественным размером отображаемой информации (размером символа) и размеры окна осмысленно выбирать пропорциональными этому стандартному размеру. Эти разумные размеры окон образуют сетку. Если задано значение true параметра setGrid, то примитив установит связь с менеджером окон. В этом случае при интерактивном запросе пользователя на изменение размеров окна верхнего уровня, содержащего примитив, возможный список размеров окна будет передан пользователю в единицах сетки, и значения его длины и ширины должны быть пропорциональны сторонам ячейки сетки. Более подробно этот процесс описан ниже (см. "УПРАВЛЕНИЕ ГЕОМЕТРИЕЙ СЕТОК"  в описании команды Wm).
      Имя параметра:   -takefocus
    Имя в Базе: takeFocus
    Класс в Базе: TakeFocus


    Указывает, допустима ли установка фокуса на окне с помощью клавиатуры (клавишами Tab и Shift-Tab). Перед установкой фокуса на окне скрипты перевода фокуса проверяют значение параметра takeFocus. Значение ▒0▓ указывает на необходимость пропускать окно при клавиатурном переключении фокуса. Значение `1' указывает на то, что при видимом окне (и всех его наследниках) фокус должен устанавливаться на нем. Пустое значение указывает на то, что скрипт переключения сам принимает решение, следует ли устанавливать фокус на данном окне: в текущем варианте окно пропускается, если оно отключено или в нем нет ключевых связок, или оно невидимо. При любом другом значении параметра скрипт переключения добавляет к этому значению имя окна (через разделяющий пробел) и интерпретирует получившуюся строку как скрипт Tcl. Скрипт должен возвращать значение `0▓,`1▓ или пустую строку. Значения ▒0▓ и `1▓ указывают, должен ли фокус ввода установиться на окно, пустая строка вызывает обработку по умолчанию, описанную выше. Замечание: подобная обработка параметра целиком определяется скриптами переключения Tcl; реализация примитивов полностью игнорирует рассматриваемый параметр.

     
    Имя параметра: -text
    Имя в Базе: text
    Класс в Базе: Text


    Задает строку, выводимую в примитиве. Способ вывода строки зависит от конкретного примитива и определяется значениями других параметров, таких как anchor или justify.
     

    Имя параметра:   -textvariable
    Имя в Базе: textVariable
    Класс в Базе: Variable


    Задает имя переменной. Значением переменной является текстовая строка, которая должна быть выведена в примитиве. При изменении значения переменной выведенная строка тут же изменяется. Способ вывода строки зависит от конкретного примитива и определяется значениями других параметров, таких как anchor или justify.
     

    Имя параметра: -troughcolor
    Имя в Базе: troughColor
    Класс в Базе: Background
    Задает цвет обрамляющих прямоугольников ≈ полосы прокрутки, поля масштабов и т.д. ≈ в примитиве
      Имя параметра: -underline
    Имя в Базе: underline
    Класс в Базе: Underline


    Задает номер подчеркиваемого символа в примитиве. Этот параметр используется связками по умолчанию для клавиатурного переключения кнопок меню и полей меню. ▒0▓ соответствует первому символу, `1▓ ≈ второму, и т.д.
     

    Имя параметра:   -wraplength
    Имя в Базе: wrapLength
    Класс в Базе: WrapLength


    Для примитивов, способных выполнять перенос строк этот параметр задает максимальную длину строки. Строки, длина которых превосходит установленную, переносятся на следующую строку. Это значение может быть задано в любом виде, в котором могут задаваться экранные расстояния. Если это значение неположительно, то переноса не происходит: он выполняется только при появлении символа переноса строки.
     

    Имя параметра:   -xscrollcommand
    Имя в Базе: xScrollCommand
    Класс в Базе: ScrollCommand
    Задает префикс команды, используемой для связи с горизонтальной полосой прокрутки. При изменении содержимого окна примитива (или любом другом событии, которое может повлечь за собой изменение вида полосы прокрутки, скажем изменении размера содержимого примитива) примитив генерирует команду Tcl путем конкатенации значения параметра и двух чисел, каждое из которых представляет собой дробь между нулем и единицей. Числа указывают положение текста в документе. ▒0▓ указывает на начало документа, `1▓ ≈ на его конец, ⌠.333■ ≈ на одну треть от начала документа и т.д. Первое число обозначает начало видимой части документа, второе ≈ на позицию, непосредственно следующую за концом видимой части. Затем команда передается интерпретатору Tcl для выполнения. Обычно значение параметра xScrollCommand состоит из имени пути к примитиву полосы прокрутки, за которым следует слово ⌠set■, например, ⌠.x.scrollbar set■: в результате состояние полосы будет изменяться всякий раз при изменении содержимого окна. Если параметр не задан, то никакая команда не будет исполняться.
      Имя параметра:   -yscrollcommand
    Имя в Базе: yScrollCommand
    Класс в Базе: ScrollCommand


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

    pack
    Геометрический менеджер, который упаковывает виджеты по сторонам внутреннего пространства окна.
     
  • Синтаксис
  • Описание
  • Алгоритм упаковки pack
  • Расширение виджетов
  • Распространение размеров
  • Ограничения на мастер-окна
  • Порядок размещения
  • СИНТАКСИС pack option arg ?arg ...? ОПИСАНИЕ Команда pack используется для управления соответствующим геометрическим менеджером, размещающим виджеты по различным сторонам родительского окна, и для получения от него справочной информации. Команда может иметь перечисленные ниже формы в зависимости от значения аргумента option.

    pack slave ?slave ...? ?options?

    Если первый аргумент команды является именем окна (любая величина, начинающаяся с ▒.▓), команда выполняется точно также, как команда pack configure. pack configure slave ?slave ...? ?options? Аргумент команды состоит из имени одного или нескольких размещаемых виджетов, после которых идут пары аргументов, состоящих из имени опции и ее значения. Подробное описание действий, выполняемых при размещении виджетов приведено ниже (см. "Алгоритм упаковки pack"). Ниже перечислены возможные опции команды. -after other Other должно быть именем другого окна. Мастер-окна other используется как мастер для slave. Список slave ?slave ...? вставляется в список размещаемых окон сразу после other. -anchor anchor Anchor должен быть одной из возможных позиций якоря, например, n или sw. Он определяет как размещается slave в отведенном ему пространстве. Значение по умолчанию ≈ center (с). -before other Other должно быть именем другого окна. Мастер-окно окна other используется как мастер-окно для slave. Список slave ?slave ...? вставляется в список размещаемых окон непосредственно перед other. -expand boolean Определяет, будут ли перечисленные виджеты расширяться при наличии свободного пространства в мастер-окне. Boolean должно иметь булево значение, например, 1 или no. Значение по умолчанию `0▓. -fill style Если в мастер-окне для slave имеется свободное пространство, управляет растяжением виджета slave. Аргумент style может иметь одно из следующих значений:

    none

    Предоставляет виджету slave требуемый размер (включая поля, запрошенные с помощью опций -ipadx или -ipady). Это значение по умолчанию. x Расширяет виджет slave в горизонтальном направлении так, чтобы он заполнил все свободное пространство (за исключением внешних полей, заданных с помощью опции -padx). y Расширяет виджет slave в вертикальном направлении так, чтобы он заполнил все свободное пространство (за исключением внешних полей, заданных с помощью опции -pady). both Расширяет виджет slave в обоих направлениях. -in other Включает slave(s) в конец списка размещаемых окон для окна other. -ipadx amount Аргумент amount указывает размер горизонтальных внутренних полей, которые должны быть с обеих сторон виджета slave. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию 0. -ipady amount Аргумент amount указывает размер вертикальных внутренних полей, которые должны быть с обеих сторон виджета slave. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию 0. -padx amount Аргумент amount указывает размер горизонтальных внешних полей, которые должны быть с обеих сторон виджета slave. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию 0. -pady amount Аргумент amount указывает размер вертикальных внешних полей, которые должны быть с обеих сторон виджета slave. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию 0. -side side Определяет, к какой стороне мастер-окна будут помещены виджеты slave. Возможные значения аргумента side: left, right, top или bottom. Значение по умолчанию top. Если никакая из опций -in, -after или -before не указана, каждый из slave будет внесен в конец списка размещения своего непосредственного родителя (если только он не был внесен туда ранее, в этом случае он останется на своем прежнем месте). Если же одна из перечисленных опций указана, все slave будут внесены в соответствующий список в указанное место.

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

    pack forget slave ?slave ...?

    Перечисленные окна удаляются из списка упаковки и с экрана. Эти окна больше не управляются геометрическим менеджером. pack info slave Возвращает список опций и их значений для окна slave в той же форме, в какой они задаются в команде pack configure. Первые два элемента списка ≈ ``-in master'', где master' ≈ имя окна, в котором размещается slave. pack propagate master ?boolean? Аргумент boolean, если он задан, определяет, будет ли окно master расширяться при необходимости (подробности приведены ниже, см. "Расширение виджетов"). Команда при этом возвращает пустую строку. Если аргумент не задан, команда возвращает текущее значение опции (0 или 1). По умолчанию расширение разрешено. pack slaves master Возвращает список всех размещаемых окон для master. Если в окне master нет размещаемых окон, возвращается пустой список.
    АЛГОРИТМ УПАКОВКИ pack Для каждого мастер-окна менеджер pack формирует список упаковки. Место каждого виджета в нем может задаваться с помощью опций -in, -after и -before. Если эти опции не использовались, каждый новый виджет добавляется в конец списка своего непосредственного предка.

    Менеджер размещает виджеты в окне, последовательно просматривая список упаковки. В момент обработки каждого из размещаемых виджетов внутри мастера есть прямоугольная незаполненная область. Эта область называется ⌠полость⌠. Для первого обрабатываемого виджета ⌠полость⌠ совпадает со всей внутренностью мастер-окна.

    Для каждого из размещаемых виджетов выполняются следующие действия:

      1. менеджер размещает прямоугольную область для очередного виджета у стороны полости, заданной опцией -side. Если значение опции top или bottom, то ширина области равна ширине полости, а высота равна требуемой для виджета высоте плюс внешние и внутренние поля, заданные опциями -ipady и -pady. Если значение опции равно left or right, высота области равна высоте полости, а ширина определяется размером виджета плюс полями, заданными опциями -ipadx и -padx. Область может быть расширена в одном или обоих направлениях в зависимости от значения опции -expand (см. ниже "Расширение виджетов").
      2. менеджер определяет размеры виджета. Обычно они равны размерам, необходимым для виджета, плюс удвоенные внутренние поля, но могут быть расширены до размеров области (минус удвоенные внешние поля) по одному или обоим направлениям в зависимости от значения опции-fill.
      3. менеджер размещает виджет в отведенном ему пространстве. Если виджет меньше свободного пространства, используется значение опции -anchor. Если определены внешние поля, то они всегда сохраняются между виджетом и границами области, в которой он помещается.
    После того, как очередной виджет размещен, выделенная ему область (см. 1)) вычитается из полости. Полость для следующего виджета остается прямоугольной, но меньшей по размеру. Если виджет не занял полностью выделенную ему область, ее оставшиеся свободными части не используются при размещении последующих виджетов. Если полость оказывается мала для очередного виджета, он получает столько пространства, сколько осталось. Если полость сокращается до нуля, все оставшиеся виджеты в списке упаковки удаляются с экрана. Если размеры окна будут увеличены, они появятся на экране.
    РАСШИРЕНИЕ ВИДЖЕТОВ Если мастер-окно оказалось больше, чем необходимо для размещения всех виджетов, оставшееся пространство распределяется равномерно между теми виджетами, для которых установлена опция -expand. Дополнительное горизонтальное пространство распределяется между теми виджетами, у которых опция -side равна left или right. Вертикальное пространство распределяется между виджетами, у которых опция -side равна top или bottom. РАСПРОСТРАНЕНИЕ РАЗМЕРОВ Обычно менеджер рассчитывает размеры мастер-окна, необходимые для размещения виджетов, и, при необходимости, устанавливает размеры мастер-окна таким образом, чтобы в нем в точности поместились все виджеты из списка. Это приводит к тому, что информация о размерах виджетов распространяется по иерархическому дереву виджетов, в результате чего целое поддерево изменяет свои размеры при изменении одного из листьевых элементов. Однако команда pack propagate может быть использована для отключения этого механизма для одного или нескольких мастер-окон. Если распространение размеров отключено, информация о необходимых размерах не передается мастер-окну. Это может оказаться полезным, если вы хотите, чтобы мастер-окно сохраняло те размеры, которые вы определили. ОГРАНИЧЕНИЯ НА МАСТЕР-ОКНА Мастер-окно для каждого размещаемого виджета должно быть его непосредственным предком (по умолчанию) или одним из потомков его предка. Это ограничение гарантирует разумное поведение виджетов при удалении toplevel-окон. ПОРЯДОК РАЗМЕЩЕНИЯ Если мастер-окно для виджета не является его непосредственным предком, необходимо быть уверенным, что виджет лежит в стеке окон выше, чем мастер-окно. В противном случае мастер-окно закроет собой виджет и создастся впечатление, что виджет не упакован правильным образом. Простейший способ избежать подобных проблем ≈ следить, чтобы -окно было создано раньше, чем виджет (чем позже создано окно, тем выше оно в стеке). Если это почему-либо неудобно, можно использовать команды raise и lower для изменения порядка окон в стеке.
    pack-old
    Устаревшая команда для геометрического менеджера упаковки окон СИНТАКСИС pack after sibling окно параметры ? окно параметры...?

    pack append parent окно параметры? окно параметры...?

    pack before sibling окно параметры? окно параметры...?

    pack unpack окно

    ОПИСАНИЕ Замечание. Ниже описан синтаксис команды pack, употреблявшейся в версиях Tk до 3.3. Хотя в целях совместимости поддержка команды в системе сохранена, команда является устаревшей и использовать ее не следует. Возможно, в будущем ее поддержка прекратится.

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

    Формы before, after и append команды pack используются для вставки одного или нескольких непосредственных потомков в очередь упаковки их родителя. В форме before команда вставляет окно-потомка перед родственными узлами; все остальные окна должны быть узлами одного уровня. В форме after окна вставляются после родственных узлов, а в форме append добавляет одно или несколько окон к очереди упаковки их родителя. Если окно, указанное в любой из этих команд уже упаковано в родительское окно, то оно удаляется со своего текущего положения в порядке упаковки и перемещается в соответствии с командой. Все эти команды возвращают в качестве результата пустую строку.

    Форма unpack команды pack command удаляет окно из очереди упаковки его родителя и стирает его с экрана. После выполнения этой команды упаковщик более не управляет геометрией окна.

    На самом деле, размещение каждого потомка представляет собой четырехступенчатую процедуру; значение параметра, следующего за окном, представляет собой список из одного или нескольких полей, управляющих размещением окна. В нижеследующем обсуждении термин ⌠полость■ (cavity) обозначает место в окне-родителе, оставшееся после размещения конкретного потомка (т.е. все то место, которое не было запрошено при размещении предыдущих потомков в очереди). Термин ⌠доля■ (parcel) обозначает количество места, отведенного конкретному потомку; это количество не обязательно соответствует окончательной геометрии окна-потомка.

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

    top

    Отводит долю потомка у верхней стороны полости на всю ширину полости. bottom Отводит долю потомка у нижней стороны полости на всю ширину полости. left Отводит долю потомка у левой стороны полости на всю высоту полости. right Отводит долю потомка у правой стороны полости на всю высоту полости.

    Для каждого окна следует задать ровно один из этих параметров. Значением стороны по умолчанию является top. Второй шаг состоит в определнии доли потомка. Для верхнего и нижнего окон желательная ширина доли обычно совпадает с шириной полости, а желательная высота совпадает с запрошенной высотой доли, которая передается команде Tk_GeometryRequest. Для левого и правого окон желательная высота доли обычно совпадает с высотой полости, а желательная ширина совпадает с запрошенной шириной доли. Однако с помощью каждого из описанных ниже параметров для окна можно запросить дополнительное место:

    padx число Добавляет число пикселей к запрошенной ширине окна перед вычислением размера доли, как это было описано выше. pady число Добавляет число пикселей к запрошенной высоте окна перед вычислением размера доли, как это было описано выше. expand Этот параметр указывает на то, что доля окна захватывает все свободное пространство, оставшееся в полости окна-родителя после упаковки всех его потомков. Размер оставшегося пространства зависит от размеров, запрошенных для всех потомков; он может равняться нулю. Если расширения (expand) затребовали несколько окон, то вся дополнительная ширина будет поделена поровну между всеми левыми и правыми окнами, запросившими расширение, а вся дополнительная высота будет поделена поровну между всеми верхними и нижними окнами, запросившими расширение. Если желаемая ширина или высота превосходит соответствующую протяженность полости, то вместо нее используется эта размер этой протяженности.

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

    fill

    Делает размеры окна равными размерам доли. fillx Увеличивает ширину окна до ширины доли, сохраняя высоту окна. filly Увеличивает высоту окна до высоты доли, сохраняя ширину окна. На последнем этапе происходит размещение окна внутри его доли. Если размеры окна и доли совпадают, то окно просто целиком заполняет долю. Если доля больше окна, то положение окна определяется с помощью одного из следующих параметров:

    frame center

    Размещает окно по центру доли. Если параметр размещения опущен, то центральное размещение принимается по умолчанию. frame n Размещает окно так, что его верхняя сторона располагается по центру верхней стороны доли. frame ne Размещает окно так, что его правый верхний угол располагается в правом верхнем углу доли. frame e Размещает окно так, что его правая сторона располагается по центру правой стороны доли. frame se Размещает окно так, что его правый нижний угол располагается в правом нижнем углу доли. frame s Размещает окно так, что его нижняя сторона располагается по центру нижней стороны доли. frame sw Размещает окно так, что его левый нижний угол располагается в левом нижнем углу доли. frame w Размещает окно так, что его левая сторона располагается по центру левой стороны доли. frame nw Размещает окно так, что его левый верхний угол располагается в левом верхнем углу доли. Упаковщик управляет состоянием размещенный/неразмещенный всех упакованных непосредственных окон-потомков. При упаковке окон упаковщик автоматически выводит их на экран; кроме того, он стирает окна, для которых в полости остается недостаточно места.

    Упаковщик посылает геометрические запросы от имени родителя размещаемых окон. Для каждого окна-родителя он запрашивает размер, достаточный для размещения всех упакованных потомков в соответствии с указанными параметрами, так что на расширение остается нулевой остаток.

    photo
    Встроенный тип полноцветных изображений Tk.
     
  • Синтаксис
  • Описание
  • Создание изображений типа photo
  • Команда image
  • Форматы изображений
  • Распределение цветов
  • СИНТАКСИС image create photo ?имя? ?параметры? ОПИСАНИЕ Пиксели изображения типа photo могут быть любого цвета, а также могут быть прозрачными. При сохранении изображений этого типа каждый пиксель кодируется 24 битами; при выводе пиксела при необходимости используется приближение (dithering). Закодированные данные могут быть представлены в виде файла или строки, а также в виде C кода через процедурный интерфейс. В настоящее время поддерживаются только форматы GIF и PPM/PGM; однако в системе имеется интерфейс, облегчающий добавление новых форматов изображений. Области, данные для которых не представлены, при выводе изображения оказываются прозрачными. СОЗДАНИЕ ИЗОБРАЖЕНИЙ ТИПА photo Как и все остальные изображения, изображения типа photo создаются командой image create. Команда поддерживает следующие параметры:

    -channel идКанала

    Параметр задает имя канала, открытого для чтения, по которому должно поступить изображение типа photo. Формат данных в канале должен быть таким, для которого существует соответствующая программа чтения данных из файла или канала. -data строка Задает содержимое изображения в виде строки. Формат данных в строке должен быть таким, для которого существует соответствующая программа чтения данных из строки. Если заданы оба параметра -data и -file, то параметр -file подавляет значение параметра -data. -format имя-формата Задает имя файла, содержащего описание формата данных, указанных параметрами -data или -file. -file имя Задает имя файла, содержащего данные для изображения типа photo. Формат файла должен быть таким, для которого существует соответствующая программа чтения данных из файла или канала. -gamma значение Указывает на то, что распределение цветов для вывода данного изображения в окне должно быть исправлено для нелинейного дисплея с помощью показателя экспоненты gamma. (В большинстве CRT интенсивность вывода является показательной функцией введенного значения, что обеспечивает качественное приближение; gamma ≈ это показатель экспоненты, его значение обычно близко к ⌠2■). Указанное значение должно быть положительным. По умолчанию параметр имеет значение `1▓ (коррекция не производится). Значения, большие единицы, осветляют изображение, меньшие единицы ≈ делают его темнее. -height число Задает высоту изображения в пикселах. Этот параметр оказывается полезным, в первую очередь, в ситуациях, когда пользователь строит изображение по частям. Значение ноль (принятое по умолчанию) обеспечивает возможность вертикального растяжения или сжатия изображения в соответствии с его содержимым. -palette спец-палитры Задает разрешение цветов выделенного изображению и число используемых цветов из палитр окон размещения изображения. Строка параметра спец-палитры может представлять собой либо одно десятичное число, задающее число используемых оттенков серого цвета, либо три десятичных числа, разделенных наклонными косыми чертами (/), задающих число используемых оттенков красного, зеленого и голубого цветов. Если строка состоит из одного десятичного числа, то будет выводиться монохромное изображение (оттенками серого цвета). -width число Задает ширину изображения в пикселах. Этот параметр оказывается полезным, в первую очередь, в ситуациях, когда пользователь строит изображение по частям. Значение ноль (принятое по умолчанию) обеспечивает возможность горизонтального растяжения или сжатия изображения в соответствии с его содержимым.
    КОМАНДА IMAGE При создании изображения типа photo Tk создает также новую команду, имя которой совпадает с именем вновь созданного изображения. С помощью этой команды можно выполнять различные операции над изображением. Она имеет следующий общий вид:

    imageName параметр ?арг арг ...?

    Параметр и аргументы уточняют поведение команды.

    Параметры, приводящие к дописыванию данных в изображение, обычно приводят к увеличению размеров изображения, за исключением случаев, когда пользователь задал ненулевые значения параметров конфигурации -width и/или -height; в последнем случае ширина и/или высота изображения не изменяются.

    Изображения типа photo поддерживают следующие команды:

    имяИзображения blank

    Очищает изображение, т.е. устанавливает, что в изображении нет данных, поэтому при выводе оно оказывается прозрачным, и на его месте видно содержимое содержащего его окна. имяИзображения cget параметр Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды image create photo. имяИзображения configure параметр значение параметр значение ... Запрашивает значения параметров конфигурации изображения или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение - нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды image create photo. имяИзображения copy исхИзобр ?параметр значение(я) ...? Копирует область изображения с именем исхИзобр (которое должно быть изображением типа photo) в изображение с именем имяИзображения, возможно с растяжением пикселей и/или subsampling. Если параметры не заданы, то команда копирует в имяИзображения все исходное изображение, начиная с точки с координатами (0,0) в изображении имяИзображения. В команде могут быть заданы следующие параметры:
    -from x1 y1 x2 y2 Задает предназначенную для копирования прямоугольную область в исходном изображении. Точки с координатами (x1,y1) и (x2,y2) задают противоположные углы прямоугольника. Если параметры x2 иy2 не заданы, то их значениями по умолчанию являются координаты нижнего правого угла исходного изображения. В копируемую область включаются левая и верхняя стороны прямоугольника, но не его нижняя и правая стороны. Значением параметра -from по умолчанию является все исходное изображение. -to x1 y1 x2 y2 Задает прямоугольную подобласть в изображении имяИзображения. Точки с координатами (x1,y1) и (x2,y2) задают противоположные углы прямоугольника. Если координаты x2 и y2 не заданы, то их значениями по умолчанию являются значения координат (x1,y1), к которым прибавлены размеры исходной области (после subsampling??? и увеличения, если они требуются). Если координаты x2 и y2 заданы, то копируемая область будет при необходимости воспроизведена несколько раз для замощения всего отведенного прямоугольника. -shrink Указывает на то, что размер отведенной области должен быть при необходимости уменьшен таким образом, чтобы копируемый прямоугольник оказался в ее правом нижнем углу. Если пользователь задал ненулевые значения параметров конфигурации -width или -height , то параметр -shrink не окажет влияния на ширину или высоту соответственно. -zoom x y Задает необходимость растяжения копируемой области с коэффициентом x в X-направлении и с коэффициентом y в Y-направлении. При задании этого параметра каждый пиксел исходного изображения при копировании будет представлен в виде прямоугольника x * y пикселей одного цвета. Оба числа x и y должны быть положительными. -subsample x y Указывает на необходимость уменьшения исходного изображения за счет использования только каждого x-го пикселя в X-направлении и каждого y-го пикселя в Y-направлении. Отрицательные значения параметров приводят к отражению в соответствующем направлении. Если параметр y не задан, то его значение по умолчанию совпадает со значением параметра x.
    имяИзображения get x y Возвращает цвет пиксела с координатами (x,y) в указанном изображении в виде списка из трех целых чисел в промежутке от ▒0▓ до ▒255▓, описывающих соответственно его красную, зеленую и голубую составляющие. имяИзображения put данные ?-tox1 y1 x2 y2? Устанавливает цвета пикселей, заданные параметром данные. Этот параметр используется для формирования двумерного массива пикселей, который затем копируется в изображение имяИзображения. Данные представляют собой список строк, идущих сверху вниз, каждая из которых является списком цветов, идущих слева направо. Каждый цвет задается именем (например, blue) или в шестнадцатеричном виде (например, #2376af). С помощью параметра -to можно отвести область для размещения массива. Если заданы только координаты x1 и y1, то верхним левым углом отведенной области является точка с координатами (x1,y1), а размеры области совпадают с размерами массива. Если указаны все четыре координаты, то они задают противоположные углы отведенного прямоугольника, и содержимое массива будет при необходимости повторено в X- и Y-направлениях для замощения всего отведенного прямоугольника. имяИзображения read имяфайла ?параметр значение(я) ...? Читает данные из файла с именем имяфайла в изображение с именем имяИзображения. Выполнение команды начинается с просмотра списка программ обработки форматов файлов изображений в поисках программы, способной интерпретировать данные в указанном файле; затем эти данные читаются из файла в изображение с именем имяИзображения. Команда может иметь следующие параметры:

    -format имя-формата

    Задает формат данных в файле с именем имяфайла. Точнее говоря, при поиске в списке программ обработки будут просматриваться только те программы, имена которых начинаются с имени-формата. -from x1 y1 x2 y2 Задает прямоугольную подобласть в изображении, описываемом данными файла, которую необходимо скопировать в изображение с именем имяИзображения. Если заданы только параметры x1 и y1, то они задают координаты левого верхнего угла подобласти, а ее правый нижний угол совпадает с правым нижним углом всего изображения в файле. Если заданы все четыре координаты, то они задают два противоположных угла подобласти. Если этот параметр не задан, то по умолчанию копируется все изображение. -shrink Если присутствует этот параметр, то размер изображения с именем имяИзображения при необходимости уменьшается таким образом, чтобы прямоугольник, отведенный под содержимое файла изображения, находился в правом нижнем углу изображения с именем имяИзображения. Если пользователь задал ненулевые значения параметров конфигурации -width или -height, то параметр -shrink не будет оказывать влияния соответственно на ширину или высоту изображения -to x y Задает координаты верхнего левого угла прямоугольника в изображении с именем имяИзображения, отводимого под данные из файла. По умолчанию параметр имеет значение (0,0).
    имяИзображения redither При выводе изображений типа photo используется алгоритм приближения (dithering) , который распространяет дискретные ошибки с пиксела на его соседей. Если данные для изображения имяИзображения поставляются частями, то результат приближения может быть не вполне корректным. Обычно эта некорректность на взгляд незаметна, однако при серьезных нарушениях с помощью данной команды можно пересчитать необходимые приближения в каждом окне, в котором выводится данное изображение. имяИзображения write имяфайла ?параметр значение(я) ...? Записывает изображение имяИзображения в файл с именем имяфайла. Может иметь следующие параметры:

    -format имя-формата

    Задает имя программы обработки файла изображения, которую следует использовать при записи данных в файл. Точнее говоря, данная подкоманда ищет первую программу обработки в списке, начало имени которой совпадает с началом имени-формата и которая способна записывать данные в файл. Если этот параметр не задан, то эта подкоманда использует первую программу обработки, способную записывать данные в файл изображения. -from x1 y1 x2 y2 Задает прямоугольную область в изображении с именем имяИзображения, которую следует переписать в файл изображения. Если заданы только значения x1 и y1, то они задают верхний левый угол прямоугольника, а его нижний правый угол совпадает с нижним правым углом изображения. Если заданы все четыре координаты, то они задают противоположные углы прямоугольника. Если параметр не задан, то по умолчанию копируется все изображение.
    ФОРМАТЫ ИЗОБРАЖЕНИЙ При создании программ обработки изображений типа photo предусмотрена возможность легкого добавления новых форматов файлов изображений. Все программы занесены в список. Добавление программы в список происходит в результате выполнения команды Tk_CreatePhotoImageFormat. В стандартном дистрибутиве Tk содержатся программы обработки для форматов PPM/PGM и GIF, которые автоматически заносятся в список при инициализации.

    При чтении файла изображения или обработке строки данных, заданной в параметре конфигурации -data, команда photo image просматривает программы обработки одну за другой, пока не найдется такая, которая утверждает, что она способна читать данные из файла или строки. Результатом поиска обычно бывает правильная программа обработки. В противном случае пользователь может задать имя программы обработки с помощью параметра -format.

    На самом деле команда photo image просматривает только те программы обработки, имена которых начинаются со строки, заданной параметром -format (при сравнении регистр не учитывается). Если, например, пользователь указал -format gif, то могут выполняться программы обработки GIF87 или GIF89, но не программа JPEG (если такие программы были внесены в список).

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

    РАСПРЕДЕЛЕНИЕ ЦВЕТОВ При выводе изображения типа photo в окно команда photo image отводит цвета и, при необходимости, возмущает изображение, заменяя отсутствующие цвета доступными. Выделяемые цвета образуют куб: число возможных составных цветов представляет собой произведение чисел оттенков красного, зеленого и голубого цветов.

    Обычно выбор числа цветов определяется глубиной окна. Например, в 8-битовом окне PseudoColor команда photo image пытается отвести семь оттенков красного, семь оттенков зеленого и четыре оттенка голубого, всего 198 составных цветов. Для 1-битового окна StaticGray (монохромного) команда отводит два цвета, белый и черный. Для 24-битовых окон DirectColor или TrueColor команда отводит по 256 оттенков каждого из трех цветов. Если не удается отвести все цвета, то команда photo image уменьшает число оттенков каждого простого цвета и производит новую попытку размещения.

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

    place
    Геометрический менеджер, обеспечивающий размещение виджетов в абсолютных или относительных координатах.
     
  • Синтаксис
  • Описание
  • Замечание
  • СИНТАКСИС placewindow option value ?option value ...?

    place configurewindow option value ?option value ...?

    place forgetwindow

    place info window

    place slaveswindow

    ОПИСАНИЕ Геометрический менеджер place позволяет размещать виджеты в их мастер-окнах, используя прямые указания о размерах и размещении виджета. Кроме того, с его помощью можно добиваться режима ⌠резинового листа⌠, указывая размеры и размещение виджета в долях размера мастер-окна. При этом виджеты изменяют свои размеры при изменении размеров мастер окна. И, наконец, менеджер place позволяет сочетать оба этих метода, размещая, например, виджет определенного размера в центре мастер-окна.

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

    placewindow option value ?option value ...?
     

    Если первый аргумент команды является именем окна (любая величина, начинающаяся с ⌠.⌠), команда выполняется точно так же, как команда place configure.


    place configurewindow option value ?option value ...?
     

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


    Ниже перечислены возможные опции.

    -in master
     

    Аргумент master определяет полное имя виджета (мастер-окна), относительно которого будет размещаться виджет window. Мастер-окно должно быть непосредственным предком виджета, или потомком этого предка. При этом они оба должны быть потомками одного и того же toplevel-окна. Эти ограничения необходимы, чтобы гарантировать, что виджет будет виден, когда видно мастер-окно. По умолчанию виджет размещается в своем непосредственном предке.


    -x location
     

    Аргумент location определяет x-координату в мастер-окне для якорной точки виджета. Координата указывается на экране в одной из следующих форм: Якорная точка не обязана находиться внутри мастер-окна. -relx location
      Аргумент location определяет x-координату в мастер окне для якорной точки виджета. Координата указывается на экране в виде десятичного числа в долях соответствующего размера мастер-окна. Так ⌠0.0■ соответствует левому краю мастер окна, 1.0 ≈ правому краю. Если указаны обе опции, -x и -relx, то соответствующие величины складываются. Например, -relx 0.5 -x -2 помещает якорную точку на два пикселя левее центра мастер-окна.


    -y location
     

    Аргумент location определяет y-координату в мастер-окне для якорной точки виджета. Координата указывается на экране в одной из следующих форм: Якорная точка не обязана находиться внутри мастер-окна.


    -rely location

    Аргумент location определяет y-координату в мастер-окне для якорной точки виджета. Координата указывается на экране в виде десятичного числа в долях соответствующего размера мастер-окна. Так 0.0 соответствует верхнему краю мастер-окна, 1.0 ≈ нижнему краю. Если указаны обе опции, -y и -rely, то соответствующие величины складываются. Например, -rely 0.5 -y -3 помещает якорную точку на три пикселя ниже центра мастер-окна. -anchor where Аргумент where определяет, какая точка виджета будет помещена в якорной точке, заданной с помощью опций -x, -y, -relx и -rely. В якорную точку помещается крайняя точка виджета (включая границу, если она задана). Так значение se означает, что в якорную точку будет помещен нижний правый угол виджета. Значение по умолчанию nw. -width size Аргумент size определяет ширину виджета на экране (допустимы те же формы, что и для опций -xи -y). Ширина ≈ это внешняя ширина виджета, включая его границу (если она задана). Если аргумент представляет собой пустую строку или если ни опция -width, ни опция -relwidth не определены, ширина виджета определяется исходя из его собственных запросов. -relwidth size Аргумент size определяет ширину виджета на экране. Ширина указывается в виде десятичного числа в долях соответствующего размера мастер-окна. Так 0.5 соответствует ширине в половину ширины мастер-окна. Если укзаны обе опции, -width и -relwidth, то соответствующие величины складываются. Например, -relwidth 1.0 -width 5 делает виджет на 5 пикселей шире мастер-окна. -height size Аргумент size определяет высоту виджета на экране (допустимы те же формы, что и для опций -xи -y). Высота ≈ это внешняя высота виджета, включая его границу (если она задана). Если аргумент представляет собой пустую строку или если ни опция -height, ни опция -relheight не определены, высота виджета определяется исходя из его собственных запросов. -relheight size Аргумент size определяет высоту виджета на экране. Высота указывается в виде десятичного числа в долях соответствующего размера мастер-окна. Так ▒0.5▓ соответствует высоте в половину высоты мастер-окна. Если указаны обе опции, -height и -relheight, то соответствующие величины складываются. Например, -relheight 1.0 -height -2делает виджет на 2 пикселя ниже мастер-окна. -bordermode mode Аргумент mode определяет, используются ли границы мастер-окна при определении положения размещаемого виджета. Значение по умолчанию, которое используется наиболее часто, ≈ inside. Оно означает, что менеджер рассматривает в качестве мастер-окна его внутреннюю часть без границы. Опция -x 0 означает при этом точку внутри границы мастер-окна. А опция -relwidth 1.0 означает, что виджет будет размещен внутри соответствующих границ мастер-окна.

    Значение outside означает, что менеджер включает границу мастер-окна в его состав. Это значение используется обычно, когда нужно разместить виджет вне его мастер-окна (но в пределах границы мастер-окна), например, как при опциях -x 0 -y 0 -anchor ne.

    Значение ignore означает, что менеджер включает в состав окна все внутренние границы, но не внешние границы (его официальное X-определение). Это значение используется, вероятно, реже остальных.

    ЗАМЕЧАНИЕ Если значение одной и той же величины определено дважды с использованием различных опций, например, если x-координата виджета определена сначала с использованием опции -x, а позднее повторно определена с использованием опции -relx, то используется только более позднее определение.

    place slaves window

    Эта команда возвращает список всех виджетов, размещенных в мастер-окне. Если в нем не размещены виджеты, команда возвращает пустой список. place forget window Окно window больше не управляется менеджером place. Как следствие, оно удаляется с экрана. Если окно не управлялось менеджером place, команда не имеет никакого эффекта. Команда возвращает пустую строку.

    place infowindow

    Возвращает список опций и их значений для окна window в той же форме, в какой они задаются в команде place configure. Если конфигурацию виджета, полученную с помощью этой команды, предполагается впоследствии восстановить, то перед этим необходимо будет использовать команду place forget, чтобы удалить текущую конфигурацию, а затем place configure с сохраненной конфигурацией. В отличие от многих других геометрических менеджеров place не пытается манипулировать геометрией мастер-окна (например, переустанавливать их размер ⌠по потребности⌠). Чтобы управлять размерами этих окон, для них желательно использовать такие виджеты, как frame или canvas.
    raise
    Команда изменяет положение окна в очереди стека. СИНТАКСИС raise window ?aboveThis? ОПИСАНИЕ Команда raise перемещает окно window в очереди стека либо выше всех окон, имеющих одинаковый с window уровень иерархии, либо перед одним из них, заданного аргументом aboveThis. Данное окно будет заслонять окна, оказавшиеся ниже его.
     
     


    scale
     

    Создание примитива линейной шкалы и управление им.

    СИНТАКСИС scale имяПути параметры СТАНДАРТНЫЕ ПАРАМЕТРЫ
       
    -activebackground -font -highlightthickness
    -repeatinterval -background -foreground
    -orient -takefocus -borderwidth
    -highlightbackground -relief -troughcolor
    -cursor -highlightcolor -repeatdelay
    Подробное описание этих параметров приведено в разделе options. ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА Имя параметра: -bigincrement
    Имя в Базе: bigIncrement
    Класс в Базе: BigIncrement


    Некоторые способы обращения со шкалой требуют использования ⌠больших■ шагов. Этот параметр задает величину большого шага. Если его значение равно 0 (как, например, по умолчанию), то большой шаг считается равным 1/10 интервала шкалы.
     

    Имя параметра: -command
    Имя в Базе: command
    Класс в Базе: Command
    Задает префикс команды Tcl, исполняемой при всяком изменении показателя шкалы какой-либо командой примитива. Сама команда Tcl состоит из этого префикса, за которым следует пробел и вещественное число, равное новому значению показателя шкалы.
      Имя параметра: -digits
    Имя в Базе: digits
    Класс в Базе: Digits
    Целое число, указывающее, сколько значащих цифр следует сохранить при преобразовании показателя шкалы в строку текста. Если это число неположительно, то выбирается наименьшее число, обеспечивающее различное представление всех возможных положений движка шкалы.
      Имя параметра: -from
    Имя в Базе: from
    Класс в Базе: From
    Вещественное число ≈ левая или верхняя граница шкалы.
      Имя параметра: -label
    Имя в Базе: label
    Класс в Базе: Label
    Строка текста, выводимая в качестве названия шкалы. Для вертикальной шкалы выводится непосредственно справа от верхнего конца шкалы. Для горизонтальной шкалы название выводится непосредственно выше левого конца шкалы. Если значением параметра служит пустая строка, то никакого названия не выводится.
      Имя параметра: -length
    Имя в Базе: length
    Класс в Базе: Length
    Задает желаемую длину шкалы на экране в пикселах (т.е. в любой форме, приемлемой для Tk_GetPixels). Это высота вертикальной шкалы или ширина горизонтальной.
      Имя параметра: -resolution
    Имя в Базе: resolution
    Класс в Базе: Resolution


    Вещественное число, задающее цену деления шкалы. Если это значение положительно, то показатель шкалы будет всегда округляться к целому кратному этой величины (такими будут, в частности, метки шкалы и границы ее интервала). Если это значение неположительно, то округления не происходит. Значение параметра по умолчанию равно `1▓ (т.е. показатели должны быть целыми).
     

    Имя параметра: -showvalue
    Имя в Базе: showValue
    Класс в Базе: ShowValue
    Булевское значение, указывающее, следует или нет выводить текущий показатель шкалы.
      Имя параметра: -sliderlength
    Имя в Базе: sliderLength
    Класс в Базе: SliderLength
    Задает размер движка шкалы (вдоль его длинной стороны) в пикселах (т.е. в любой форме, приемлемой для Tk_GetPixels).
      Имя параметра: -sliderrelief
    Имя в Базе: sliderRelief
    Класс в Базе: SliderRelief


    Задает вид движка шкалы, например, raised или sunken.
     

    Имя параметра: -state
    Имя в Базе: state
    Класс в Базе: State
    Задает одно из трех состояний шкалы: normal, active или disabled. Если шкала недоступна, то значение ее показателя нельзя изменить и шкалу нельзя активизировать. Движок на активной шкале изображается цветом, заданным параметром activeBackground.
      Имя параметра: -tickinterval
    Имя в Базе: tickInterval
    Класс в Базе: TickInterval


    Вещественное число, определяющее величину промежутка между числовыми метками снизу или слева от движка. Если значение параметра равно ⌠0■, то метки не выводятся.
     

    Имя параметра: -to
    Имя в Базе: to
    Класс в Базе: To


    Вещественное число ≈ правая или нижняя граница шкалы. Может быть как меньше, так и больше значения, задаваемого параметром from.
     

    Имя параметра: -variable
    Имя в Базе: variable
    Класс в Базе: Variable
    Задает имя глобальной переменной, ассоциированной со шкалой. При изменении значения переменной шкала обновляется и показывает новое значение. При интерактивном изменении показателя шкалы происходит соответствующее изменение значения переменной.
      Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width
    Задает желаемую толщину полосы шкалы (в любой форме, приемлемой для Tk_GetPixels). Для вертикальной шкалы это ее ширина, для горизонтальной ≈ высота.
    ОПИСАНИЕ Команда scale создает новое окно (задаваемое аргументом имяПути) и превращает его в примитив линейной шкалы. Детали изображения шкалы, такие как ее цвета, ориентация и объемный вид задаются с помощью описанных выше дополнительных параметров. Команда scale возвращает аргумент имяПути. В момент выполнения этой команды не должно существовать окна с именем имяПути, но должен существовать его предок.

    Шкала представляет собой примитив, который выводит на экран прямоугольную полоску шкалы и маленький движок. Полоска отображает интервал вещественных чисел (определенный параметрами from, toи resolution), а положение движка задает некоторое конкретное число на этом интервале. Положение движка (а значит, и показатель шкалы) можно менять с помощью ⌠Мыши■ или клавиатуры, как описано ниже (см. ⌠ПРИВЯЗКИ■). При каждом изменении показателя шкалы исполняется команда Tcl (заданная параметром command), и другие примитивы получают доступ к результатам выполненного изменения. Кроме того показатель шкалы можно (с помощью параметра variable) связать с некоторой переменной, так что изменения значений показателя или переменной немедленно отзываются друг на друге.

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

    КОМАНДА ПРИМИТИВА Команда scale создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид.

    имяПути параметр арг арг ...

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

    имяПути cget параметр

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

    имяПути configure параметр значение параметр значение ...

    Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды scale.

    имяПути coords ?значение?

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

    имяПути get ?x y?

    Если аргументы x иy опущены, то возвращает текущий показатель шкалы. Если они заданы, то они определяют координаты точки в примитиве; в этом случае команда возвращает значение показателя шкалы, соответствующего указанной точке. При этом используется только одна из координат: x для горизонтальной шкалы и y для вертикальной.

    имяПути identify x y

    Возвращает текстовую строку, указывающую, какая часть шкалы расположена в точке с координатами xиy. Возвращаемое значение slider означает, что это точка на движке; trough1 означает, что точка находится выше или левее движка; trough2означает, что точка находится ниже или правее движка. Если точка расположена вне шкалы, то команда возвращает пустую строку.

    имяПути set значение

    Эта команда предназначена для изменения текущего показателя шкалы, а значит, и положения движка. Аргумент значение задает новое значение показателя. Если шкала недоступна, то команда не приводит ни к каким результатам.

    ПРИВЯЗКИ При создании линейной шкалы Tk автоматически создает привязки класса, определяющие следующее поведение примитива по умолчанию. В случае, если имеются различия в поведении вертикальной и горизонтальной шкалы, описание поведения горизонтальной приводится в скобках.

    При нажатии клавиши 1 ⌠Мыши■ на полосе шкалы движок сдвигается в направлении курсора на величину, заданную параметром resolution. Если клавишу не отпускать, то сдвиг автоматически повторяется.

    Если нажать клавишу 1 на движке, то движок можно тащить.

    Если нажать клавишу 1 на полосе шкалы при нажатой клавише Control, то движок пробежит до конца полосы в направлении курсора ⌠Мыши■.

    Если нажать клавишу 2, то показатель шкалы будет установлен в положение курсора ⌠Мыши■. Если тащить ⌠Мышь■ с нажатой клавишей 2, то показатель шкалы будет соответственно меняться.

    Нажатие на клавиши Up и Left приводит к перемещению движка вверх (влево) на величину, указанную параметром resolution.

    Нажатие на клавиши Down и Right приводит к перемещению движка вниз (вправо) на величину, указанную параметром resolution.

    Нажатие на клавиши Control-Up и Control-Left приводит к перемещению движка вверх (влево) на величину, указанную параметром bigIncrement.

    Нажатие на клавиши Control-Down и Control-Right приводит к перемещению движка вниз (вправо) на величину, указанную параметром bigIncrement.

    Нажатие на клавишу Home приводит к перемещению движка вверх (влево) до конца полосы.

    Нажатие на клавишу End приводит к перемещению движка вниз (вправо) до конца полосы.

    Если шкала сделана недоступной с помощью параметра state, то ни одна из описанных выше привязок не оказывает какого-либо действия.

    Определяя новые привязки к отдельным примитивам или переопределяя привязки класса, поведение линейной шкалы можно изменить.
     
     

    scrollbar
    Создание примитива линейки прокрутки и управление им.
     
  • Синтаксис
  • Стандартные параметры
  • Дополнительные параметры примитива
  • Описание
  • Элементы
  • Команда примитива
  • Команды прокрутки
  • Синтаксис команды
  • Привязки
  • СИНТАКСИС scrollbar имяПути параметры СТАНДАРТНЫЕ ПАРАМЕТРЫ
       
    -activebackground -highlightbackground -orient 
    -takefocus  -background -highlightcolor 
    -relief -troughcolor  -borderwidth 
    -highlightthickness -repeatdelay -cursor 
    -jump -repeatinterval
    Подробное описание этих параметров приведено в разделе options. ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА Имя параметра: -activerelief
    Имя в Базе: activeRelief
    Класс в Базе: ActiveRelief


    Задает объемный вид изображения активного элемента. Все неактивные элементы изображаются выпуклыми.
     

    Имя параметра: -command
    Имя в Базе: command
    Класс в Базе: Command


    Задает префикс команды Tcl, исполняемой при всяком изменении состоянии линейки прокрутки пользователем. Сама команда Tcl состоит из этого префикса, за которым следует дополнительная информация, описанная ниже. Значением этого параметра обычно является что-нибудь вроде .t xview или .t yview ≈ имя примитива, за которым следует xview (для горизонтальной линейки) или yview (для вертикальной). У каждого примитива линейки прокрутки есть команды xview и yview, аргументы которых описаны ниже (см. "Команды прокрутки").
     

    Имя параметра: -elementborderwidth
    Имя в Базе: elementBorderWidth
    Класс в Базе: ElementBorderWidth


    Задает ширину окантовки каждого из внутренних элементов линейки (обеих стрелок и движка). Значение может быть представлено в любом виде, приемлемом для Tk_GetPixels. Если заданное значение отрицательно, то вместо него используется значение параметра borderWidth.
     

    Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width
    Задает желаемую толщину окна линейки (не включая трехмерной окантовки, если она имеется) в любой форме, приемлемой для Tk_GetPixels. Для вертикальной шкалы это ее ширина, для горизонтальной ≈ высота.
    ОПИСАНИЕ Команда scrollbar создает новое окно (задаваемое аргументом имяПути) и превращает его в примитив линейки прокрутки. Детали изображения линейки, такие как ее цвета, ориентация и объемный вид, задаются с помощью описанных выше дополнительных параметров. Команда возвращает аргумент имяПути. В момент выполнения этой команды не должно существовать окна с именем имяПути, но должен существовать его предок.

    Линейка прокрутки представляет собой примитив, который выводит на экран две стрелки (по одной на каждом конце линейки) и движок в средней части линейки. Линейка дает информацию о том, что видно в ассоциированном окне линейки. Это окно содержит какой-нибудь документ ≈ например, редактируемый текст или рисунок. Размер и положение движка указывают, какая часть документа видна в окне. Если, например, движок покрывает верхнюю треть вертикальной линейки, то в ассоциированном окне выведена верхняя треть документа.

    Линейки прокрутки используются для перемещения видимой части документа в ассоциированном окне с помощью ⌠Мыши■. Подробности описаны ниже (см. Привязки).

    ЭЛЕМЕНТЫ Линейка прокрутки состоит из пяти элементов, на которые ссылаются команды примитива:

    arrow1

    Верхняя или левая стрелка линейки. trough1 Промежуток между движком и первой стрелкой. slider Прямоугольник, который показывает, какая часть документа видна на экране. trough2 Промежуток между движком и первой стрелкой. arrow2 Нижняя или правая стрелка линейки.
    КОМАНДА ПРИМИТИВА Команда scrollbar создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

    имяПути параметр арг арг ...

    Параметр и аргументы уточняют поведение команды. Примитивы линейки прокрутки допускают следующие формы команды: имяПути activate элемент Помечает элемент, заданный аргументом элемент, как активный. Активный элемент отображается на экране с использованием значений параметров activeBackground и activeRelief. Значениями аргумента могут быть только arrow1, slider или arrow2. Если элемент не задан, то команда возвращает имя текущего активного элемента; если активных элементов нет, то команда возвращает пустую строку. имяПути cget параметр Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды scrollbar. имяПути configure параметр значение параметр значение ...

    Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды scrollbar.

    имяПути delta прирX прирY

    Возвращает вещественное число, задающее изменение показателя линейки при данном перемещении движка. Например, если линейка горизонтальна, то результат указывает, насколько нужно изменить показатель линейки, чтобы движок сдвинулся вправо на прирX пикселей (в этом случае значение аргумента прирY игнорируется). Если линейка вертикальна, то результат указывает, насколько нужно изменить показатель линейки, чтобы движок сдвинулся вниз на прирY пикселей. Как аргументы, так и результат могут принимать отрицательные и нулевое значения. имяПутиfraction x y Возвращает вещественное число между нулем и единицей, указывающее, где на полосе линейки лежит точка с координатами x и y. Значение `0▓ соответствует самой левой или самой верхней точке полосы, значение `1▓ ≈ самой правой или самой нижней, `0.5▓ указывает на середину полосы и т.д. Координаты x и y ≈ это координаты в пикселях относительно примитива линейки. Если они задают точку вне полосы линейки, то вместо нее используется точка полосы, ближайшая к заданной. имяПути get Возвращает показатели линейки в виде списка, элементы которого ≈ значения аргументов последней выполненной команды примитива set. имяПути identify x y Возвращает имя элемента, занимающего точку с координатами (x,y) (например, arrow1). Если точка расположена вне линейки, то команда возвращает пустую строку. Координаты x и y ≈ это координаты в пикселах относительно примитива линейки. имяПути set перв послед Эта команда выполняется примитивом, ассоциированным с линейкой, и сообщает линейке текущий вид этого примитива. Значением каждого из двух аргументов команды является число в промежутке от ▒0▓ до `1▓. Эти числа описывают видимую в окне примитива область документа. Если, например, значение аргумента перв равно `0.2▓, а значение аргумента послед равно `0.4▓, то верхушка видимой части документа отстоит на 20% от его начала, а конец видимой части ≈ на 40% от начала.
    КОМАНДЫ ПРОКРУТКИ Когда пользователь взаимодействует с линейкой прокрутки (например, тащит движок), линейка требует от ассоциированного примитива изменения его состояния. Это требование осуществляется за счет исполнения команды Tcl, которая генерируется исходя из значения параметра -command примитива линейки. Команда может иметь один из следующих видов, где префикс ≈ это значение параметра -command (обычно что-нибудь вроде .t yview).

    префикс moveto величина

    Величина представляет собой вещественное число между нулем и единицей. Примитив должен изменить содержимое окна таким образом, чтобы точка, заданная аргументом величина, располагалась в начале окна. Например, величина равная ▒0▓ указывает на начало документа, `1.0▓ ≈ на его конец, `0.333▓ ≈ на точку, отстоящую от начала документа на одну треть и т.д. префикс scroll число units Сдвигает содержимое окна примитива на число единиц. Единицы ≈ это порции документа, имеющие смысл для документа данного типа (например, символы или строчки для текстового примитива). Аргумент число может принимать значение `1' (и тогда одна единица должна уйти из окна вверх или влево), или `-1▓ (и тогда одна единица должна уйти из окна вниз или вправо). префикс scroll числоpages Содержимое окна примитива должно сдвинуться на число страниц. Страницы ≈ это порции документа, имеющие смысл для документа данного типа; обычно размер порции несколько меньше того, что помещается в окне, и поэтому новое содержимое окна частично перекрывается со старым. Аргумент число может принимать значение `1▓ (и тогда становится видимой следующая страница), или `-1▓ (и тогда становится видимой предыдущая страница).
    СИНТАКСИС КОМАНДЫ В младших версиях Tk (до 4.0) команды примитива set и get имели другой вид. В целях совместимости эта форма команд поддерживается и до сих пор, однако использовать ее не стоит. Вот старый вид команды:

    имяПути set числоЕдин окноЕдин первЕдин последЕдин

    Значения всех аргументов команды должны быть целыми числами. Аргумент числоЕдин задает общее число единиц в документе. Единицы ≈ это порции документа, имеющие смысл для документа данного типа (например, строчки для текстового примитива). Аргумент окноЕдин указывает число единиц, одновременно помещающихся в окно ассоциированного примитива. Аргументы первЕдин и последЕдин указывают индексы первой и последней единиц, находящихся в окне в текущий момент (ноль указывает на первую единицу объекта). В старом синтаксисе команда get возвращала список из четырех целых чисел ≈ значений аргументов последней выполненной команды примитива set.

    В старом синтаксисе команды, генерируемые примитивом линейки, также имеют другой вид:

    префикс единица

    Аргумент единица представляет собой целое число, указывающее, что должно появляться вверху или слева в окне ассоциированного примитива. Этот аргумент интерпретируется так же, как и аргументы первЕдин и последЕдин команды примитива set. Последняя выполненная команда примитива set определяет, следует ли использовать старый синтаксис. Если ее аргументы ≈ два вещественных числа, то в дальнейшем будет использоваться новый синтаксис, а если четыре целых ≈ то старый.
    ПРИВЯЗКИ При создании линейки прокрутки Tk автоматически создает привязки класса, определяющие следующее поведение примитива по умолчанию. В случае, если имеются различия в поведении вертикальной и горизонтальной линеек, описание поведения горизонтальной приводится в скобках.

    При нажатии клавиши 1 ⌠Мыши■ на стрелке 1 (arrow1) содержимое окна ассоциированного примитива сдвигается вниз (вправо) на одну единицу. Если клавишу не отпускать, то сдвиг автоматически повторяется.

    При нажатии клавиши 1 ⌠Мыши■ на полосе 1 (trough1) содержимое окна ассоциированного примитива сдвигается вниз (вправо) на один экран. Если клавишу не отпускать, то сдвиг автоматически повторяется.

    Если нажать клавишу 1 на движке, то движок можно тащить. Если значение параметра jump ≈ истина, то содержимое окна не меняется, пока не отпущена клавиша ⌠Мыши■.

    При нажатии клавиши 1 ⌠Мыши■ на полосе 2 (trough2) содержимое окна ассоциированного примитива сдвигается вверх (влево) на один экран. Если клавишу не отпускать, то сдвиг автоматически повторяется.

    При нажатии клавиши 1 ⌠Мыши■ на стрелке 2 (arrow2) содержимое окна ассоциированного примитива сдвигается вверх (влево) на одну единицу. Если клавишу не отпускать, то сдвиг автоматически повторяется.

    Если нажать клавишу 2 на полосе или на движке, то содержимое окна переходит в положение, указанное курсором ⌠Мыши■ ; если тащить курсор при нажатой клавише 2, то содержимое окна движется вслед за курсором. Нажатие клавиши 2 на стрелках приводит к тому же результату, что и нажатие клавиши 1.

    Если клавиша 1 нажимается при нажатой клавише Control, то в окне появляется начало документа (если курсор ⌠Мыши■ находится на стрелке 1 или полосе 1) или его конец (если курсор находится на стрелке 2 или полосе 2). При других положениях курсора такое нажатие на клавиши не приводит ни к каким действиям.

    В вертикальных линейках прокрутки нажатие на клавиши Up и Down приводят к такому же результату, что и щелчок ⌠Мыши■ на стрелках вверх и вниз соответственно. В горизонтальных линейках нажатие на эти клавиши не вызывает никаких действий.

    В вертикальных линейках прокрутки нажатие на клавиши Control-Up и Control-Down приводят к такому же результату, что и щелчок ⌠Мыши■ на верхней и нижней полосках линейки соответственно. В горизонтальных линейках нажатие на эти клавиши не вызывает никаких действий.

    В горизонтальных линейках прокрутки нажатие на клавиши Up и Down приводят к такому же результату, что и щелчок ⌠Мыши■ на левой и правой стрелках соответственно. В вертикальных линейках нажатие на эти клавиши не вызывает никаких действий.

    В горизонтальных линейках прокрутки нажатие на клавиши Control-Up и Control-Down приводят к такому же результату, что и щелчок ⌠Мыши■ на левой и правой полосках линейки соответственно. В вертикальных линейках нажатие на эти клавиши не вызывает никаких действий.

    Нажатие на клавиши Prior и Next приводят к такому же результату, что и щелчки ⌠Мыши■ на полосе 1 и полосе 2 соответственно.

    Нажатие на клавишу Home приводит к появлению в окне начала документа.

    Нажатие на клавишу End приводит к появлению в окне конца документа.
     
     

    selection
    Управление X выделением СИНТАКСИС selection параметр ?арг арг ...? ОПИСАНИЕ Команда предоставляет интерфейс Tcl для механизма Х выделения и реализует полный набор функций выделения, описанный в (1). Аргумент параметр определяет формат последующих аргументов и поведение команды. В настоящее время поддерживаются следующие формы команды:

    selection clear ?-displayof окно? ?-selectionвыделение?

    Если на дисплее окна имеются выделения, их следует очистить так, чтобы ни одно из окон не владело выделением. Параметр выделение задает X выделение, которое должно быть очищено; его значением должно быть имя атома, например, PRIMARY или CLIPBOARD; полное описание см. в (1). По умолчанию значением параметра выделение является PRIMARY, а параметра окно ≈ ".". Команда возвращает пустую строку. selection get ?-displayof окно? ?-selection выделение? ?-type тип? Ищет выделение на дисплее окна и возвращает его значение в качестве результата. По умолчанию значением параметра выделение является PRIMARY, а параметра окно ≈ ".". Параметр тип задает вид возвращаемого результата (в терминологии (1) ≈ ⌠цель■), его значением должно быть имя атома, например, STRING или FILE_NAME; полное описание см. (1). По умолчанию он имеет значение STRING. Владелец выделения может выбрать для его вывода любой из форматов STRING, ATOM, INTEGER и т.д. (этот формат отличается от типа выделения; детально различия описаны в (1)). Если формат, в котором выделение возвращается, не строковый, например, INTEGER или ATOM, то команда selection преобразует выделение в строковый формат, представляя его в виде набора полей, разделенных пробелами: атомы представляются своими текстовыми именами, а все остальное преобразуется в последовательность шестнадцатиричных цифр. selection handle ?-selection выделение? ?-typeтип? ?-format формат? окно команда Создает программу обработки запросов на поиск выделения: при каждой попытке поиска выделения указанного типа в окне (например, командой selection get) будет выполняться команда. По умолчанию значением параметра выделение является PRIMARY, параметра тип STRING, и параметра формат тоже STRING. Если значением параметра команда является пустая строка, то все программы обработки для указанного окна, типаи выделения удаляются. Если при запросе выделения окно является его владельцем и выделение имеет указанный тип, то к команде добавляется два числа (отделенных пробелами от имени команды и друг от друга) и она исполняется как команда Tcl. Эти два дополнительных числа представляют собой смещение и максБайт: смещение задает положение первого символа в выделении, а максБайт ≈ максимальное количество байтов для поиска. Возвращаемое командой значение должно начинаться с указанного символа в выделении и должно быть не длиннее максБайт. Для очень больших выделений (длина которых превышает максБайт) поиск будет повторяться многократно с возрастающими смещениями. Если длина строки, возвращаемой командой, меньше максБайт, то предполагается, что возвращенное значение включает в себя весь остаток выделения; если длина результата совпадает с максБайт, то команда будет выполняться повторно пока она не возвратит, наконец, строку, более короткую, чем указано параметром максБайт. Значение максБайт всегда довольно велико (порядка нескольких тысяч байтов).

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

    Аргумент формат задает представление, используемое для передачи выделения автору запроса (см. (1), второй столбец в Таблице 2), его значение по умолчанию STRING. Если значением аргумента формат является STRING, то выделение передается в виде 8-битовых символов ASCII (т.е. в том же виде, в каком его возвращает команда). Если его значение ATOM, то возвращаемое значение разбивается на поля, отделенные друг от друга пробелами; каждое поле преобразуется в свое атомарное значение и вместо имени атома передается 32-битовое атомарное значение. В любом другом формате возвращаемое командой значение разбивается на поля, отделенные друг от друга пробелами, и каждое поле преобразуется в целое 32-битовое число; полученный массив целых чисел передается автору запроса.

    Аргумент формат необходим лишь для обеспечения совместимости пользователям, не использующим Tk. Если для поиска выделения используется Tk, то на выходе из запроса результат преобразуется назад в строку, поэтому аргумент формат не играет роли.

    selection own ?-displayof окно? ?-selectionвыделение?

    selection own ?-commandкоманда? ?-selection выделение? окно

    Первая форма команды selection own возвращает имя пути окна в данном приложении, владеющего выделением на дисплее, содержащем окно; если таких окон нет, то команда возвращает пустую строку. По умолчанию значением параметра выделение является PRIMARY, а параметра окно ≈ ".". Вторая форма команды selection own делает окно новым владельцем выделения на дисплее окна; она возвращает пустую строку. Текущий владелец выделения (если такой существует) получает сообщение о том, что он потерял выделение. Если задан параметр команда, то его значением является скрипт Tcl, который должен исполняться при попытке какого-либо другого окна заявить права на выделение вне данного окна. По умолчанию значением параметра выделение является PRIMARY.



    radiobutton

    Создание примитива кнопки-переключателя и управление им.
     
  • Синтаксис
  • Стандартные параметры
  • Дополнительные параметры примитива
  • Описание
  • Команда примитива
  • Привязки
  • СИНТАКСИС radiobutton имяПути параметры СТАНДАРТНЫЕ ПАРАМЕТРЫ
       
    -activeBackground -cursor -highlightthickness
    -takefocus -activeforeground -disabledforeground
    -image -text -anchor
    -font -justify -textvariable
    -background -foreground -padx
    -underline -bitmap -highlightbackground
    -pady -wraplength  -relief
    -borderwidth -highlightcolor
    Подробное описание этих параметров приведено в разделе options. ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА Имя параметра: -command
    Имя в Базе: command
    Класс в Базе: Command
    Ассоциирует с кнопкой команду Tk. Обычно команда выполняется при отпускании клавиши 1 ⌠Мыши■ на окне кнопки-переключателя. Перед выполнением команды обновляется значение глобальной переменной переключателя (параметр -variable).
      Имя параметра: -height
    Имя в Базе: height
    Класс в Базе: Height


    Задает желаемую высоту кнопки. Если в кнопке выводится изображение или двуцветное изображение, то значение параметра задается в пикселах (т.е., в любом виде, приемлемом для Tk_GetPixels); высота текстовой кнопки задается числом строчек текста. Если параметр не задан, то высота кнопки вычисляется по ее содержимому.
     

    Имя параметра: -indicatoron
    Имя в Базе: indicatorOn
    Класс в Базе: IndicatorOn
    Указывает, следует ли выводить индикатор. Значение параметра должно быть булевским. Если значением является ложь, то параметр relief игнорируется и примитив всегда изображается вдавленным, если он выделен, и выпуклым в противном случае.
      Имя параметра: -selectcolor
    Имя в Базе: selectColor
    Класс в Базе: Background


    Задает цвет фона для изображения выделенной кнопки. Если параметр IndicatorOn имеет значение истина, то указанный цвет применяется для изображения индикатора. В системе Windows тот же цвет используется в качестве фона изображения индикатора вне зависимости от состояния выделения. Если значением параметра IndicatorOn является ложь, то указанный цвет используется в качестве фона для всего примитива, когда он выделен, вместо значений параметров background и activeBackground.
     

    Имя параметра: -selectimage
    Имя в Базе: selectImage
    Класс в Базе: SelectImage


    Задает изображение, выводимое в кнопке при выделении кнопки-переключателя (вместо изображения, заданного параметром -image). Если параметр -image отсутствует, то значение параметра -selectimage игнорируется.
     

    Имя параметра: -state
    Имя в Базе: state
    Класс в Базе: State


    Задает одно из трех состояний кнопки-переключателя: normal, active или disabled. В нормальном состоянии кнопка-переключатель изображается с использованием значений параметров foreground и background. В активном состоянии кнопка-переключатель обычно находится, если на ней расположен курсор. Кнопка-переключатель в активном состоянии изображается с использованием значений параметров activeForeground и activeBackground. Недоступное состояние указывает на то, что кнопка должна быть нечувствительной: привязки по умолчанию не приводят к запуску примитива и нажатия на кнопку ⌠Мыши■ игнорируются. В этом состоянии изображение кнопки-перключателя определяется значениями параметров disabledForeground и background.
     

    Имя параметра: -value
    Имя в Базе: value
    Класс в Базе: Value
    Задает значение, которое следует заносить в переменную кнопки-переключателя при выделении этой кнопки.
      Имя параметра: -variable
    Имя в Базе: variable
    Класс в Базе: Variable
    Задает имя глобальной переменной, значение которой нужно устанавливать при выделении кнопки. Изменение значения этой переменной также приводит к изменению состояния выделения кнопки. По умолчанию параметр имеет значение selectedButton.
      Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width


    Задает желаемую ширину кнопки-переключателя. Если в кнопке выводится изображение или двуцветное изображение, то значение параметра задается в пикселах (т.е., в любом виде, приемлемом для Tk_GetPixels); ширина текстовой кнопки задается числом символов. Если параметр не задан, то ширина кнопки вычисляется по ее содержимому.

    ОПИСАНИЕ Команда radiobutton создает новое окно (задаваемое аргументом имяПути) и превращает его в примитив кнопки-переключателя. Детали изображения кнопки-переключателя, такие как ее цвета, шрифт, текст и исходный объемный вид задаются с помощью описанных выше дополнительных параметров. Команда radiobutton возвращает аргумент имяПути. В момент выполнения этой команды не должно существовать окна с именем имяПути, но должен существовать его предок.

    Кнопка-переключатель представляет собой примитив, в котором выводится текстовая строка, изображение или двуцветное изображение, а также ромб или кружок, называемый индикатором. Весь выводимый текст должен быть записан одним шрифтом, однако он может занимать несколько строчек на экране (если в нем есть символы перевода строки или задан параметр wrapLength). Один из символов текста может быть подчеркнут (в соответствии со значением параметра underline). Кнопка-переключатель обладает всеми характеристиками обычной кнопки, включая следующие: в зависимости от значения параметра state кнопка имеет три разных вида; кнопка может выглядеть выпуклой, вдавленной или плоской, кроме того, она может мигать. При инициации кнопки-переключателя (нажатием на клавишу 1 ⌠Мыши■, когда курсор ⌠Мыши■ находится на кнопке) выполняется команда Tcl.

    Кроме того, кнопки-переключатели можно выделять. Если кнопка выделена, то индикатор обычно изображается как выделенный, а переменная Tcl, ассоциированная с данной кнопкой, имеет предписанное значение (обычно 1). В ОС Unix индикатор изображается вдавленным и имеет специальный цвет. В системе Windows вместо этого в индикаторе появляется круглая метка. Если кнопка-переключатель не выделена, то индикатор имеет невыделенный вид, а ассоциированная переменная имеет другое значение (обычно ⌠0■). В ОС Unix такой индикатор изображается выпуклым и не имеет специального цвета. В системе Windows в невыделенном индикаторе отсутствует круглая метка. Обычно одна переменная обслуживает несколько кнопок-переключателей, а ее значение указывает, какая из них должна быть выделена. При выделении кнопки происходит изменение значения ассоциированной переменной. Кроме того, каждая кнопка-переключатель отслеживает значение ассоциированной переменной и при его изменении состояние выделения кнопки меняется. По умолчанию используется переменная selectedButton; ее значением является имя выделенной кнопки или пустая строка, если ни одна из кнопок, ассоциированных с данной переменной, не выделена. Имя переменной и записываемые в ней значения ⌠выделенная■/■невыделенная■ можно поменять с помощью параметров командной строки или в базе данных параметров. С помощью параметров конфигурации можно также поменять вид индикатора (или даже отменить саму необходимость его вывода). По умолчанию выделение кнопки-переключателя происходит при щелчке на кнопке.

    КОМАНДА ПРИМИТИВА Команда radiobutton создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

    имяПути параметр арг арг ...

    Параметр и аргументы уточняют поведение команды. Примитивы кнопки-переключателя допускают следующие формы команды: имяПути cget параметр Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды radiobutton. имяПути configure параметр значение параметр значение ... Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение - нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды radiobutton. имяПути deselect Отменяет выделение кнопки-переключателя и придает ассоциированной переменной значение ⌠пустая строка■. Если в момент исполнения команды данная кнопка-переключатель не была выделена, то команда не производит никаких действий. имяПути flash Заставляет кнопку-переключатель мигать. Этот эффект достигается путем многократного вывода изображения кнопки поочередно в активном и нормальном состоянии. По окончании работы команды кнопка-переключатель остается в том же состоянии (активном или нормальном), что и перед началом ее выполнения. Если перед началом выполнения команды кнопка находится в состоянии disabled, то команда игнорируется. имяПути invoke Приводит в точности к тому же результату, что и нажатие клавиши ⌠Мыши■ на кнопке-переключателе: кнопка становится выделенной и выполняется команда Tcl, ассоциированная с кнопкой (при наличии такой команды). Возвращаемое значение совпадает с возвращаемым значением команды Tcl (или является пустой строкой, если с кнопкой никакой команды не ассоциировано). Если перед началом выполнения команды кнопка-переключатель находится в состоянии disabled, то команда игнорируется. имяПути select Выделяет кнопку, перерисовывая ее в новом состоянии и изменяя значение ассоциированной переменной.
    ПРИВЯЗКИ При создании кнопки-переключателя Tk автоматически создает привязки к ней, определяющие ее поведение по умолчанию:
    1. в ОС Unix кнопка становится активной при появлении над ней курсора ⌠Мыши■ и дезактивируется, когда курсор ее покидает. В системах Mac и Windows при нажатии клавиши 1 ⌠Мыши■ на переключателе кнопка активизируется, когда курсор ⌠Мыши■ находится на кнопке и дезактивируется, когда курсор ее покидает;
    2. при нажатии клавиши 1 ⌠Мыши■ на кнопке-переключателе кнопка становится выделенной и выполняется команда, привязанная к ней;
    3. если кнопка-переключатель находится в фокусе ввода, то нажатие на клавишу пробела приводит к выполнению команды, привязанной к этой кнопке;
    4. если кнопка-переключатель находится в состоянии disabled, то все описанные выше действия не приводят ни к какому результату: кнопка остается безответной.
    Поведение кнопки-переключателя можно изменить с помощью новых привязок к конкретным примитивам или путем переопределения привязок данного класса.

    send
    Выполнить команду в другом приложении.
     
  • Синтаксис
  • Описание
  • Имена приложений
  • Блокировка посылаемых команд
  • Безопасность
  • СИНТАКСИС send ?параметры? прил кмд ?арг арг ...? ОПИСАНИЕ Обеспечивает выполнение команды, заданной параметром кмд (с аргументами, заданными параметрами арг), в приложении с именем прил. Возвращает результат выполненной команды или ошибку. Аргумент прил может задавать имя любого из приложений, главное окно которого расположено на том же дисплее, что и главное окно запрашивающего приложения; запрошенное приложение не обязано управляться тем же процессом. Если аргументы отсутствуют, то выполняемая команда полностью определяется аргументом кмд. Если присутсвует один или несколько аргументов, то они конкатенируются с кмд в точности так же, как и в команде eval.

    Если первые аргументы команды начинаются с дефиса "-", то они интерепретируются как параметры. В настоящее время допустимы следующие параметры:

    -async

    Запрашивает асинхронный вызов. В этом случае выполнение команды send завершается немедленно, не дожидаясь завершения выполнения команды, заданной аргументом кмд, в приложении-адресате; результат выполнения посланной команды или возникающие при выполнении ошибки игнорируются. Если адресат управляется тем же процессом, что и посылающее приложение, то параметр -async игнорируется. -displayof имяПути Указывает на то, что главное окно приложения-адресата должно быть на том же дисплее, что и окно, заданное аргументом имяПути, а не на дисплее посылающего приложения. -- Единственная задача этого параметра ≈ завершить список параметров. Он используется только если значение аргумента прил может начинаться с дефиса "-".
    ИМЕНА ПРИЛОЖЕНИЙ Первоначально имя приложения определяется именем программы или скрипта, его создающего. Имя приложения можно узнать и изменить с помощью команды appname Tk. БЛОКИРОВКА ПОСЫЛАЕМЫХ КОМАНД Если отменить в приложении команду send (например, выполнив команду rename send {}), то приложение перестанет реагировать на поступающие запросы send и само не сможет посылать запросы. Восстановить взаимодействие приложений можно, выполнив команду appname Tk. БЕЗОПАСНОСТЬ Команда send является потенциальным источником серьезных нарушений защиты, так как любое приложение, способное соединиться с Вашим X сервером, может посылать скрипты в Ваше приложение. С помощью Tcl присланные скрипты могут читать Ваши файлы и выполнять запись в них и запускать подпроцессы под Вашим именем. Особенно уязвимо управление доступом вида xhost, так как всякий пользователь, заведенный на головном компьютере, может связаться с Вашим сервером; если же это управление доступом отключить, то связь становится возможной вообще для любого пользователя, где бы он ни находился. Чтобы обеспечить хотя бы минимальную защиту, Tk проверяет систему управления доступом на сервере и отвергает все присланные команды, если либо (а) xhost-система управления доступом отключена (так что лишь некоторые головные компьютеры могут устанавливать связь); либо (б) список головных компьютеров, которым такая связь разрешена, пуст. В результате никакое приложение не сможет связаться с Вашим сервером, если у него не будет дополнительных прав (например, предоставленных xauth).
    table
    Создание таблиц и действия с ними.

    Команда становится доступной для выполнения после загрузки библиотеки Tktable2.3 командой:

    load /usr/local/lib/Tktable2.3/Tktable.so.2.3
  • Синтаксис
  • Стандартные опции
  • Специальные опции команды
  • Описание команды
  • Инициализация
  • Индексы
  • Теги
  • Встроенные окна
  • Выбор
  • Командные подстановки
  • Команды виджета
  • Стандартное поведение
  • СИНТАКСИС table имя виджета ? опции ? СТАНДАРТНЫЕ ОПЦИИ
       
    -anchor  -background  -borderwidth 
    -cursor -exportselection -font 
    -foreground -highlightbackground -highlightcolor 
    -highlightthickness -insertbackground -insertborderwidth
    -insertofftime  -insertontime  -insertwidth
    -invertselected  -padx -pady
    -relief -takefocus -xscrollcommand
    -yscrollcommand    
    Детальное описание стандартных опций (см. ⌠Опции). СПЕЦИАЛЬНЫЕ ОПЦИИ КОМАНДЫ Имя опции в Командной строке: -autoclear
    Имя опции в Базе данных Х ресурсов: autoClear
    Имя Класса в Базе данных Х ресурсов: AutoClear
    Булева величина, которая определяет, будет ли по первому нажатию на клавишу удаляться из ячейки тот текст, который был прежде там. Значение по умолчанию ≈ 0.
      Имя опции в Командной строке:-bordercursor
    Имя опции в Базе данных Х ресурсов: borderCursor
    Имя Класса в Базе данных Х ресурсов: Cursor


    Определяет имя курсора, который появляется на границе поля и показывает, что размеры поля могут быть изменены интерактивно (определяется значением опции -resizeborders). По умолчанию √ crosshair (перекрестье).

     
    Имя опции в Командной строке:-browsecommand или -browsecmd
    Имя опции в Базе данных Х ресурсов: browseCommand
    Имя Класса в Базе данных Х ресурсов: BrowseCommand


    Определяет команду, которая выполняется каждый раз, когда изменяется активная ячейка. В команде могут использоваться %-подстановки, описанные ниже в разделе  Командные подстановки.
     

    Имя опции в Командной строке:-cache
    Имя опции в Базе данных Х ресурсов: cache
    Имя Класса в Базе данных Х ресурсов: Cache


    Булева величина, которая определяет, будет ли использоваться внутренний кеш таблицы. Его использование позволяет существенно повысить производительность при использовании опции -command, но требует дополнительной памяти. Может улучшить производительность и тогда, когда опции -command и -variable не заданы. Кеш автоматически сбрасывается всякий раз при изменении опций -cache и -variable, в противном случае Вы должны сами сделать это. Значение по умолчанию ≈ ложь.
     

    Имя опции в Командной строке:-colorigin
    Имя опции в Базе данных Х ресурсов: colOrigin
    Имя Класса в Базе данных Х ресурсов: Origin
    Определяет, какой индекс столбца является самым левым столбцом в таблице. Эта величина используется для пользовательских индексов в таблице. Значение по умолчанию ≈ ▒0▓.
      Имя опции в Командной строке:-cols
    Имя опции в Базе данных Х ресурсов: cols
    Имя Класса в Базе данных Х ресурсов: Cols


    Число столбцов в таблице. Значение по умолчанию ≈ ▒10▓.

     
    Имя опции в Командной строке:-colseparator
    Имя опции в Базе данных Х ресурсов: colSeparator
    Имя Класса в Базе данных Х ресурсов: Separator


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

    Имя опции в Командной строке:-colstretchmode
    Имя опции в Базе данных Х ресурсов: colStretchMode
    Имя Класса в Базе данных Х ресурсов: StretchMode
    Определяет один из следующих способов расширения столбцов для заполнения дополнительного пространства окна:

    none

    Столбцы не расширяются и не заполняют все отведенное пространство окна таблицы. Если столбцы слишком узки, то в таблице справа будет пробел. Это √ значение по умолчанию. unset Расширяются только те столбцы, которые не имеют явно заданной ширины. all Все столбцы расширяются на одно и то же количество пикселей, чтобы заполнить все пространство окна. В этом режиме могут возникнуть трудности при ручном изменении размеров ширины ячейки. fill (используется только при значении опции √rowstretch, равном currently) В таблице получится больше или меньше столбцов в соответствии с величиной отведенного пространства. Этот способ имеет многочисленные причуды и может исчезнуть в будущем. last Последний столбец расширяется так, чтобы заполнить все пространство окна таблицы. Имя опции в Командной строке:-coltagcommand
    Имя опции в Базе данных Х ресурсов: colTagCommand
    Имя Класса в Базе данных Х ресурсов: TagCommand


    Задает имя процедуры, которая выполняется, чтобы определить тэг, который используется для данного столбца. Чтобы определить, как отображать ячейку, сначала проверяется, не задан ли тэг для столбца с помощью команды tag col. Если тэг для столбца не задан, выполняется процедура, определенная с помощью настоящей опции. Процедура получает номер столбца в качестве единственного аргумента. Процедура должна возвратить имя тэга или пустую строку. Если при выполнении процедуры происходит ошибка или процедура возвращает недопустимое имя тэга, сообщения об ошибке не выдается.
     

    Имя опции в Командной строке:-colwidth
    Имя опции в Базе данных Х ресурсов: colWidth
    Имя Класса в Базе данных Х ресурсов: ColWidth
    Задает ширину столбца по умолчанию. Ширина столбца определяется в символах шрифта (используемого по умолчанию), если она является положительным числом, или в пикселях, если она является отрицательным числом. Значение по умолчанию ≈ `10▓.
      Имя опции в Командной строке:-command
    Имя опции в Базе данных Х ресурсов: command
    Имя Класса в Базе данных Х ресурсов: Command


    Определяет команду, которая используется в качестве процедурного интерфейса к содержимому ячеек. Если опция -usecommand имеет значение истина, эта команда будет использоваться вместо любой ссылки на массив ≈ variable. При выборе значения из таблицы вместо содержимого ячейки возвращается результат выполнения команды. Использует %-подстановки, описанные ниже в разделе  Командные подстановки.
     

    Имя опции в Командной строке:-drawmode
    Имя опции в Базе данных Х ресурсов: drawMode
    Имя Класса в Базе данных Х ресурсов: DrawMode


    Устанавливает один из следующих режимов рисования таблицы:

    slow

    Таблица предварительно формируется в памяти (offscreen pixmap) с использованием двойной буферизации. Для границ используются Tk-функции. Этот способ исключает мигание, но оказывается медленным для больших таблиц. compatible Таблица изображается непосредственно на экране с использованием Tk-функций для границ. Это более быстрый способ, но экран может мигать При изменениях. Это √ значение по умолчанию. fast Таблица изображается непосредственно на экране, причем границы рисуются с использованием быстрых X-вызывов, то есть шириной в один пиксель. Как побочный эффект, сужается область значений допустимых значений опции -borderwidth до `0▓ и `1▓. Этот способ обеспечивает наилучшую производительность для больших таблиц, но при этом возможно мигание. Кроме того, этот способ допустим не при всех возможных в Tk значениях ширины границы. single Таблица рисуется на экране как в режиме fast, но линии изображаются только одним пикселем. Имя опции в Командной строке: -flashmode
    Имя опции в Базе данных Х ресурсов: flashMode
    мя Класса в Базе данных Х ресурсов: FlashMode
    Булево значение, которое определяет, будут ли ячейки мигать, когда их величина изменяется. Тэг flash назначается этим ячейкам на время, определенное с помощью опции -flashtime. По умолчанию устанавливается на 0.
      Имя опции в Командной строке:-flashtime
    Имя опции в Базе данных Х ресурсов: flashTime
    Имя Класса в Базе данных Х ресурсов: FlashTime


    Время в четвертях секунды, в течение которого ячейка высвечивается при изменении величины. Опция -flashmode должно иметь значение on. Значение по умолчанию ≈ 2.
     

    Имя опции в Командной строке:-height
    Имя опции в Базе данных Х ресурсов: height
    Имя Класса в Базе данных Х ресурсов: Height


    Определяет желаемую высоту для окна в рядах ячеек. Если задано нуль или менее, высота окна выбирается достаточно большой, чтобы содержать все ряды таблицы. Высота может ограничиваться с помощью опции -maxheight.
     

    Имя опции в Командной строке:-invertselected
    Имя опции в Базе данных Х ресурсов: invertSelected
    Имя Класса в Базе данных Х ресурсов: InvertSelected


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

    Имя опции в Командной строке:-maxheight
    Имя опции в Базе данных Х ресурсов: maxHeight
    Имя Класса в Базе данных Х ресурсов: MaxHeight
    Максимально возможная высота окна в пикселях. Значение по умолчанию ≈ 600.
      Имя опции в Командной строке:-maxwidth
    Имя опции в Базе данных Х ресурсов: maxWidth
    Имя Класса в Базе данных Х ресурсов: MaxWidth
    Максимально возможная ширина окна в пикселях. Значение по умолчанию ≈ 800.
      Имя опции в Командной строке:-multiline
    Имя опции в Базе данных Х ресурсов: multiline
    Имя Класса в Базе данных Х ресурсов: Multiline
    Определяет значение по умолчанию для опции тэгов -multiline. Значение по умолчанию ≈ `1▓.
      Имя опции в Командной строке:-resizeborders
    Имя опции в Базе данных Х ресурсов: resizeBorders
    Имя Класса в Базе данных Х ресурсов: ResizeBorders
    Определяет возможность интерактивного изменения размеров ячеек. Допустимые значения опции ≈ row, col, both (по умолчанию) и none.
      Имя опции в Командной строке:-rowheight
    Имя опции в Базе данных Х ресурсов: rowHeight
    Имя Класса в Базе данных Х ресурсов: RowHeight
    Высота колонки по умолчанию. Задается в числе строк текста (шрифта, устанавливаемого по умолчанию), когда число является положительными, или в пикселях, если оно ≈ отрицательное. Значение по умолчанию ≈ `1▓.
      Имя опции в Командной строке:-roworigin
    Имя опции в Базе данных Х ресурсов: rowOrigin
    Имя Класса в Базе данных Х ресурсов: Origin
    Определяет, какую строку считать самой верхней строкой таблицы. Эта величина используется для индексов пользователя в таблице. По умолчанию устанавливается на ⌠0■.
    Имя опции в Командной строке:-rows
      Имя опции в Базе данных Х ресурсов: rows
    Имя Класса в Базе данных Х ресурсов: Rows
    Количество строк в таблице. Значение по умолчанию ≈ `10▓.
      Имя опции в Командной строке:-rowseparator
    Имя опции в Базе данных Х ресурсов: rowSeparator
    Имя Класса в Базе данных Х ресурсов: Separator
    Определяет символ, который будет проинтерпретирован как разделитель строк при вставке или удалении данных из таблицы. По умолчанию, строки разделяются как списки tcl.
      Имя опции в Командной строке:-rowstretchmode
    Имя опции в Базе данных Х ресурсов: rowStretchMode
    Имя Класса в Базе данных Х ресурсов: StretchMode
    Определяет способ расширения строк для заполнения дополнительного пространства окна. Допустимые значения опции такие же, как для опции √colstretchmode.
      Имя опции в Командной строке:-rowtagcommand
    Имя опции в Базе данных Х ресурсов: rowTagCommand
    Имя Класса в Базе данных Х ресурсов: TagCommand
    Задает имя процедуры, которая выполняется, чтобы определить тэг, который используется для данной строки. Процедура определяется пользователем. Она получает номер строки в качестве единственного аргумента. Процедура должна возвратить имя тэга или пустую строку. Опция аналогична опции √coltagcommand и отличается только тем, что задает тэг строки.   Имя опции в Командной строке:-selectioncommand or -selcmd
    Имя опции в Базе данных Х ресурсов: selectionCommand
    Имя Класса в Базе данных Х ресурсов: SelectionCommand
    Определяет команду, которая выполняется при получении значений ячеек через механизм выбора (например, при выполнении команды ⌠selection get■). Результат выполнения команды возвращается как результат выбора. В команде могут использоваться %-подстановки, описанные ниже в разделе  Командные подстановки. Если при выполнении команды происходит ошибка, она обрабатывается как ошибка фонового Tcl процесса и команда ничего не возвращает.  
    Имя опции в Командной строке:-selectmode
    Имя опции в Базе данных Х ресурсов: selectMode
    Имя Класса в Базе данных Х ресурсов: SelectMode
    Определяет один из возможных режимов выбора ячеек. Величина опции может быть произвольной, но встроенная обработка имеется только для следующих режимов: single, browse, multiple и extended; значение по умолчанию browse. Эти режимы аналогичны соответствующим режимам для Tk listbox, за исключением того, что они применяются для двумерных таблиц.  
    Имя опции в Командной строке:-selecttitle
    Имя опции в Базе данных Х ресурсов: selectTitles
    Имя Класса в Базе данных Х ресурсов: SelectTitles
    Определяет, допускается ли выбор ячеек заголовков. По умолчанию устанавливается на ▒0▓ (выбор не допускается).  
    Имя опции в Командной строке:-selecttype
    Имя опции в Базе данных Х ресурсов: selectType
    Имя Класса в Базе данных Х ресурсов: SelectType
    Определяет один из различных типов выбора для таблицы. Опция может принимать одно из значений: row, col, cell, или both (означает row && col); значение по умолчанию cell. Определяет, будет ли изменение выбора для ячейки (установление или снятие) воздействовать на весь ряд и(или) колонку.  
    Имя опции в Командной строке:-state
    Имя опции в Базе данных Х ресурсов: state
    Имя Класса в Базе данных Х ресурсов: State
    Определяет одно из двух состояний таблицы: нормальное или неактивное. Если таблица не активна, то величины в ячейках не могут быть изменены с использованием команд таблицы и никакой курсор вставки не отображается, даже если фокус установлен в таблице. По умолчанию устанавливается нормальное состояние.   Имя опции в Командной строке:-titlecols
    Имя опции в Базе данных Х ресурсов: titleCols
    Имя Класса в Базе данных Х ресурсов: TitleCols
    Количество столбцов, используемое для заголовков. По умолчанию устанавливается на ▒0▓.  
    Имя опции в Командной строке:-titlerows
    Имя опции в Базе данных Х ресурсов: titleRows
    Имя Класса в Базе данных Х ресурсов: TitleRows
    Количество строк, используемое для заголовков. По умолчанию устанавливается на 0.  
    Имя опции в Командной строке:-usecommand
    Имя опции в Базе данных Х ресурсов: useCommand
    Имя Класса в Базе данных Х ресурсов: UseCommand
    Булева величина, которое определяет, будет ли использоваться команда, заданная с помощью опции -command. Эта величина переустанавливается в нуль, если команда используется и возвращает ошибку. Значение по умолчанию ≈ `1▓ (команда будет использоваться, если она задана).  
    Имя опции в Командной строке:-validate
    Имя опции в Базе данных Х ресурсов: validate
    Имя Класса в Базе данных Х ресурсов: Validate
    Булева величина, определяющая, будет ли производиться проверка корректности значения активной ячейки. По умолчанию устанавливается на ⌠0■.  
    Имя опции в Командной строке:-validatecommand или -vcmd
    Имя опции в Базе данных Х ресурсов: validateCommand
    Имя Класса в Базе данных Х ресурсов: ValidateCommand
    Определяет команду, которая выполняется для проверки корректности нового значения при редактировании активной ячейки. Эта команда должна возвращать булеву величину. Если она возвращает true, то считается, что новое значение ячейки корректно. В противном случае считается, что введенное значение некорректно и изменения величины в ячейке не произойдет. Если при выполнении этой команды возникает ошибка, она обрабатывается как ошибка фонового Tcl процесса. В команде могут использоваться %-подстановки, описанные ниже в разделе Командные подстановки.  
    Имя опции в Командной строке:-variable
    Имя опции в Базе данных Х ресурсов: variable
    Имя Класса в Базе данных Х ресурсов: Variable
    Задает имя Tcl переменной (глобального массива), для работы с С массивом, связанным с данной таблицей. Массив будет создан, если он не существует или если это простая переменная. Индексы элементов массива имеют вид row,col для соответствующих ячеек. В массиве содержится также элемент active, который содержит величину буфера активной ячейки. Tcl массив может быть разреженным массивом (не требуется, чтобы в нем содержались элементы для всех ячеек таблицы). Более того, никакой элемент массива не содержит пустой величины, и при очистке ячейки соответствующий элемент удаляется из Tcl массива.  
    Имя опции в Командной строке:-width
    Имя опции в Базе данных Х ресурсов: width
    Имя Класса в Базе данных Х ресурсов: Width
    Определяет желаемую ширину для окна в столбцах ячеек. Если она задана равной нулю или отрицательной, то ширина для окна выбирается достаточно большой, чтобы содержать все столбцы в таблице. Определенная таким образом величина будет ограничена значением опции √maxwidth, если она задана.  
    Имя опции в Командной строке:-wrap
    Имя опции в Базе данных Х ресурсов: wrap
    Имя Класса в Базе данных Х ресурсов: Wrap
    Разрешает для тэга перенос текста в ячейках на следующую строку. Значение по умолчанию ≈ ▒0▓.
    ОПИСАНИЕ КОМАНДЫ Команда table создает таблицу ≈ 2-мерную сетку ячеек. Таблица может использовать переменную Tcl массива или Tcl команду для сохранения и выбора данных. Таблица имеет активную ячейку, содержимое которой может быть отредактировано (если таблица находится в нормальном состоянии). Таблица поддерживает общий стиль для ячеек, а также многочисленные тэги, которые могут использоваться, чтобы изменить стиль колонки, столбца или конкретной ячейки (см. "Теги"). Для ячеек можно установить поведение, при котором измененные ячейки меняют цвет на определенное время (⌠мигают⌠). Ячейки могут содержать не только текст, но и графические изображения или встроенные окна, как указано во фрагментахТеги и ⌠Встроенные окна⌠ соответственно.

    Одна или более ячеек могут быть выбраны, как указано ниже. Если таблица экспортирует свой выбор (смотри опцию -exportselection), то соблюдаются стандартные протоколы X11 для обработки выбора. (См. ⌠Выбор■).

    Не обязательно, чтобы все ячейки таблицы были видны сразу в табличном окне; описанные ниже команды могут использоваться для просмотра ячеек. Таблицы допускают ⌠прокрутку■ в обоих направлениях, используя стандартные опции -xscrollcommand и -yscrollcommand. Они также поддерживают просмотр ячеек, как указано ниже.

    Чтобы обеспечить достаточную производительность, для таблиц можно выбирать один из трех методов прорисовки, два из которых являются полностью Tk-совместимыми.

    ИНИЦИАЛИЗАЦИЯ Когда команда table загружается в интерпретатор, выполняется встроенная Tcl команда tkTableInit. Она ищет и исполняет файл с описанием стандартного поведения таблиц. Файл ищется в каталогах $tcl_pkgPath (как для конкретной, так и для произвольной версии Tktable), $tk_library и [pwd] (текущий каталог). Вы можете также определить $env(TK_TABLE_LIBRARY), который будет поставлен в начало этого списка. По умолчанию, ищется файл tkTable.tcl, но имя файла может быть изменено с помощью переменной $env(TK_TABLE_LIBRARY_FILE).

    Этот скрипт может быть заменен на ваш собственный, если вы создадите собственную процедуру tkTableInit прежде, чем библиотека будет загружена. В противном случае, вышеупомянутая переменная env(TK_TABLE_LIBRARY) будет содержать имя каталога, в котором был найден файл $env(TK_TABLE_LIBRARY_FILE).

    ИНДЕКСЫ Многие команды для таблиц используют один или более индексов как аргументы. Индекс определяет конкретную ячейку таблицы одним из следующих способов:

    число,число

    Определяет ячейку, соответствующую элементу row,col связанного Tcl массива, где -roworigin,-colorigin соответствует первой ячейке в таблице (0,0 по умолчанию). active Указывает активную ячейку, (ячейку, которая содержит курсор). Активная ячейка может задаваться командой activate. anchor Указывает якорную точку для выбора, которая устанавливается с помощью команды selection anchor. bottomright Указывает самую нижнюю ≈ самую правую ячейку, видимую в таблице. end Указывает самую нижнюю ≈ самую правую ячейку в таблице. origin Указывает самую верхнюю ≈ самую левую редактируемую ячейку таблицы, не обязательно видимую на экране. topleft Указывает самую верхнюю ≈ самую левую редактируемую ячейку, видимую в таблице. @x,y Указывает ячейку, которая покрывает в табличном окне точку с координатами x и y (в пикселях). Если никакая ячейка не покрывает эту точку, используется ближайшая к этой точке ячейка. В описаниях команд таблиц, приведенных ниже, аргументы, называющиеся index, first или last всегда обозначают индексы в одной из вышеуказанных форм.
    ТЕГИ Тэг является текстовой строкой, которая связывается с нулем или больше колонок, столбцов или ячеек в таблице. Тэги могут содержать произвольные символы, но желательно избегать использования для тегов имен, похожих на индексы. С колонками, столбцами или ячейками таблицы может быть связано любое количество тэгов. В каждой таблице есть несколько постоянных тэгов, которые могут конфигурироваться пользователем и определят атрибуты для специальных ячеек:

    active

    Это тэг активной ячейки. flash Если режим высвечивания включен, этот тэг дается всем недавно отредактированным ячейкам. sel Этот тэг дается всем выбранным ячейкам. title Этот тэг дается всем ячейкам, используемым для заголовков колонок и строк. Для этого тэга по умолчанию определено состояние ⌠неактивно■. Тэги определяют, как соответствующие ячейки отображаются на экране. По умолчанию, ячейки отображаются, как определено опциями -background, -font, и √foreground для таблицы. Тем не менее, для каждого тэга могут быть заданы индивидуальные значения этих опций с помощью команды pathName tag configure Если для ячейки задан тэг, опции тэга переопределяют стиль таблицы. В настоящее времени для тэгов поддерживаются следующие опции:

    -anchor anchor

    якорь для текста или другого объекта в пространстве ячейки; -background или -bg color цвет Фона ячейки; -font fontName шрифт для текста в ячейке; -foeground или -fg color цвет переднего плана ячейки; -justify justify выключка текста в ячейке. Возможные значения left, right, center; -image imageName графический объект, который будет отображен в ячейке вместо текста; -multiline boolean отобразить текст с символами ⌠конец строки■ в виде нескольких строк; -relief relief рельеф для ячейки; -showtext boolean показывать текст поверх графического объекта; -state state состояние ячейки, позволяет определенным ячейкам быть неактивными. Это предохраняет ячейку от редактирования с помощью вставки или удаления, но остается возможным прямое занесение информации в массив, результаты которого отображаются в таблице; -wrap boolean разрешает переносить символы в следующую строку, если ячейка недостаточно широкая. Для тэгов определен порядок приоритета. Он используется при выполнении некоторых описанных ниже функций, связанных с тэгами. Когда ячейка отображается, ее свойства определяются тэгами, которые ей присвоены. Этот порядок, включая специальные тэги, ≈ flash, active, sel, title, celltag, rowtag, coltag, default.

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

    Графические объекты используются только для показа. Редактирование текста в таких ячейках остается возможным, и любой запрос покажет текст, хранящийся в ячейке, независимо от значения опции -showtext.

    ВСТРОЕННЫЕ ОКНА В таблице может быть произвольное количество встроенных окон (по одному на ячейку), и любой виджет (подчиняющийся обычным правилам, по которым встроенное окно должно быть потомком табличного окна или его родителя) может быть использован в качестве встроенного окна. Позиция встроенного окна на экране будет скорректирована, как только будет изменена или передвинута таблица, и оно будет отображено на экране или спрятано в зависимости от того, находится ли соответствующая ячейка в видимой области таблицы. Каждое встроенное окно занимает одну ячейку таблицы, и на него можно сослаться по индексу ячейки. Встроенные окна уничтожаются, когда уничтожается содержащая их таблица.

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

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

    -create script

    В НАСТОЯЩЕЕ ВРЕМЯ НЕ ПОДДЕРЖИВАЕТСЯ. Определяет Tcl скрипт, который может выполняться для создания заявленного окна. Если для окна, встроенного в ячейку, опция √window не задана, при необходимости отобразить ячейку на экране будет выполнен скрипт. Скрипт должен создать окно и вернуть его имя как результат выполнения скрипта. Если впоследствии окно будет удалено, перед повторным появлением ячейки на экране скрипт будет выполнен опять. -background или -bg color Цвет Фона окна. Если опция не определена, то используется цвет фона таблицы. -padx pixels Как определено в руководстве по Tk. -pady pixels Как определено в руководстве по Tk. -relief relief Рельеф, используемый для ячейки, в которой лежит окно. Если опция не определена, используется значение для таблицы. -sticky sticky ⌠Клейкость■ окна в ячейке, как определено для команды grid. -window pathName Определяет имя окна, которое будет отображено в ячейке. Окно должно существовать прежде, чем может быть использовано здесь.
    ВЫБОР Табличные выборы представляют собой данные типа СТРОКА. По умолчанию, величина выбора состоит из величин (значений) выбранных ячеек в форме Tcl списка, где каждый ряд является списком и каждый столбец является элементом списка ряда. Вы можете изменить способ, которым интерпретируется эта величина, с помощью опций -rowseparator и colseparator. Например, формат Эксела устанавливается с помощью значений
    -rowseparator ⌠\n⌠ и -colseparator ⌠\t⌠. Изменение этих опций влияет как на формирование выбора для таблицы, так и на чтение данных при вставке, гарантируя, что в таблице можно вырезать данные и вставить их в нее же. Можно изменять поведение таблицы при вставке данных с помощью редактирования библиотечной процедуры tk_tablePasteHandler. Это может потребоваться, если установлена опция -selectioncommand.
    КОМАНДНЫЕ ПОДСТАНОВКИ Команды, задающиеся с помощью различных опций таблиц, могут использовать традиционные для Tk %-ные подстановки (см. bind). Следующие %-ные подстановки выполняются при работе с таблицами:

    %c

    Для SelectionCommand это ≈ максимальное количество столбцов в ряду в выбранной области.

    Для остальных команд √ индекс столбца ячейки, вызвавшей событие.

    %c

    Удобная замена для %r,%c. %i Для SelectionCommand это ≈ общее число ячеек в выбранной области. Для Command это ≈ `0▓ для чтения (get) и `1▓ для записи (set).

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

    %R

    Для SelectionCommand это ≈ количество рядов в выбранной области. Для остальных команд ≈ ряд ячейки, породившей событие.

    %S

    Для ValidateCommand это ≈ текущее значение в ячейке, которое будет проверяться. Для SelectionCommand это ≈ значение по умолчанию для выбора.

    Для BrowseCommand это ≈ индекс последней активной ячейки.

    Для Command это ≈ пустое значение для чтения (get) и текущая значение в ячейке для записи (set).

    %S

    Для ValidateCommand это ≈ потенциальное новое значение в ячейке, значение в которой проверяется. Для BrowseCommand это ≈ индекс новой активной ячейки.

    %W

    Имя окна, вызвавшего событие.
    КОМАНДЫ ВИДЖЕТА Команда table создает новую команду Tcl, чье имя является именем созданного виджета. Эта команда может использоваться, чтобы выполнить различные действия с виджетом. У нее есть следующая общая форма:

    pathName option ?arg arg ...?

    где pathName √ имя виджета.

    Значение опции и аргументов определяют точное назначение команды.

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

    pathName activate index

    Активизирует ячейку, заданную индексом. pathName bbox first ?last? Возвращает параметры области, объемлющей заданную ячейку (группу ячеек) в виде списка из четырех элементов: координат x и y левого верхнего угла области, ее ширины и высоты в пикселях. Область объемлет только те из указанных ячеек, которые видны на экране. Если таких ячеек нет, возвращается пустая строка. pathName border optionargs Эта команда является волшебным средством, для переноса границ ячеек при изменении их размеров. Обычно она вызывается через события с одной из следующих подопций: pathName border mark x y ?row|col? Запоминает координаты x и y и границу строки и/или столбца под этой точкой в таблице, если точка лежит на границе. Используется в связке с последующей командой border dragto. Чаще всего эта команда вызывается по нажатию кнопки ⌠Мыши■ на таблице. Если аргумент row или col не задан, команда возвращает кортеж из обоих индексов границы (пустой кортеж означает, что точка не принадлежит границе). В противном случае возвращается индекс заданной границы (строки или столбца соответственно). pathName border dragto x y Эта команда вычисляет разность между своими x и y аргументами и y и x аргументами последней команды border mark для таблицы. Затем она изменяет положение границы на вычисленную разность. Эта команда обычно вызывается по событию движения ⌠Мыши■ в таблице, чтобы произвести эффект интерактивного изменения границы. pathName cget option Возвращает текущую величину опции. Option может быть любой из опций, определенных для таблиц. pathName clear option ?first? ?last? Эта команда является удобной утилитой, чтобы удалять различные объекты таблицы. first и last представляют правильные табличные индексы. Если ни один индекс не задан, команда выполняется для всей таблицы. Возможные подопции: pathName clear cache ?first? ?last? Очищает определенный раздел кеша, если таблица использовала кеш. pathName clear sizes ?first? ?last? Отменяет заданные размеры ячеек для столбцов и колонок, входящих в заданную область. Если задан только один индекс, например, ▒2,0▓, то он задает область, состоящую из колонки ▒2▓ и столбца ▒0▓. pathName clear tags ?first? ?last? Очищает определенную область от тэгов (все row, column и cell тэги). pathName clear all ?first? ?last? Выполняет все вышеуказанные действия в определенной области. pathName configure ?option? ?value? ?option value ...? Запрашивает или модифицируют опции таблицы. Если никакая опция не определена, возвращает список, описывающий все доступные опции для виджета (смотри Tk_ConfigureInfo для информации о формате этого списка). Если опция указана без значения, команда возвращает список, описывающий одну опцию (этот список идентичен соответствующему подсписку списка, возвращаемого, если никакая опция не задана). Если заданы одна или более пар опция-величина, то команда модифицирует данную опцию виджета, чтобы она имела данное значение (значения); в этом случае команда возвращает пустую строку. Опция может быть любой из опций, определенных для команды table. pathName curselection ?set value? Если аргументы команды не заданы, то команда возвращает отсортированные индексы выбранных ячеек. В противном случае она устанавливает во все выбранные ячейки заданное значение. Опция set не воздействует на таблицу, если у таблицы нет связанного Tcl массива или состояние таблицы неактивно. pathName curvalue?value? Если величина не задана, возвращается величина из редактируемой ячейки (с индексом active), иначе величина устанавливается в активной величине. pathName deleteoptionarg?arg? Эта команда используется, чтобы удалять различные компоненты таблицы. У нее есть различные формы, в зависимости от подопции: pathName deleteactive index?index? Удаляет текст из активной ячейки. Если дан только один индекс, команда удаляет символ после этого индекса, в противном случае удаляются символы с первого индекса по второй. index может быть числом, insert или end. pathName deletecols?switches?index?count? Удаляет count колонок, начиная с колонки с индексом index. Если count ≈ отрицательное, удаляет колонки влево от начальной. В противном случае удаляет колонки вправо. Выбор очистится. Дополнительные ключи: -cols value Устанавливает искусственное ограничение на число столбцов в активной области. Столбцы за пределами активной области при этом изменяться не будут. По умолчанию используется величина опции -cols таблицы, то есть активная область распространяется на все столбцы. Использование опции может вызвать интересные побочные эффекты, когда опция используется в связке с другими опциями. -holddimensions Обеспечивает сохранение числа столбцов в таблице (при удалении могут появиться пустые столбцы вместо удаленных). По умолчанию число столбцов уменьшается в соответствии со значением count. -holdtags Обеспечивает сохранение тэгов, созданных с помощью команды tag, при удалении всех ячеек, для которых они были заданы. Тэги присваиваются новым ячейкам с соответствующими индексами. Также предотвращает изменение ширины таблицы, если она задана с помощью команды width. По умолчанию новые ячейки, вставшие на место удаленных, не наследуют их тегов. -keeptitles Защищает ячейки области заголовка от изменения. В противном случае они могут быть удалены подобно регулярным ячейкам. -rows value Устанавливает искусственное ограничение на число строк в активной области. Строки за пределами активной области при этом изменяться не будут. По умолчанию используется величина опции -rows таблицы, то есть активная область распространяется на все строки. Использование опции может вызвать интересные побочные эффекты, когда опция используется в связке с другими опциями. -- Означает конец ключей. pathName delete rows ?switches?index?count? Удаляет count строк таблицы, начиная со строки index (и включая ее). Если count отрицательное, то удаляются предшествующие строки. В противном случае удаляются последующие строки. Выбор очищается. Ключи √ такие же, как для удаления столбца. pathName flush?first? ?last? Сохраняет табличный кеш от first до last. Если индексы не заданы, сохраняется весь кеш. pathName getfirst?last? Возвращает (в виде списка) значения из ячеек, содержащихся в прямоугольной области с левым верхним углом, заданным индексом first, и правым нижним углом, определяемым индексом last (если задан). pathName height?row? ?value rowvalue ...? Если никакая строка не задана, возвращает список, описывающий все строки, для которых высота установлена. Если колонка задана без величины, возвращает высоту этой колонки в символах (положительное число) или пикселях (отрицательное число). Если одна или более пар строка-величина определены, тогда, устанавливает высоту соответствующих строк в строках символов (положительное число) или пикселях (отрицательный номер). Если задано значение высоты ⌠default■, то высота строки определяется значением опции -rowheight. pathName icursor?arg? Если команда задана без аргументов, то она возвращает позицию курсора вставки в активной ячейке. Если команда задана с одним аргументом, то она устанавливает курсор в этой точке в строке. 0 ≈ перед первым символом. Допустимые индексы: insert для текущего положения курсора и end для конца текста. pathName index index?row|col? Возвращает индекс ячейки, которая соответствует указанному индексу, в форме row,col. Если задана опция row или col, то команда возвращает только индекс строки или столбца соответственно. pathName insertoptionarg arg Эта команда используется, чтобы вставлять различные объекты (значения, колонки, столбцы и т.п.) в таблицу. У нее есть различные формы в зависимости от подопции: pathName insert active index value value является текстовой строкой, которая вставляется в активную ячейку, начиная с позиции index. Курсор затем позиционируется после встроенного текста. index может быть числом, insert или end. pathName insert cols?switches? index ?count? Вставляет count столбцов, начиная с индекса col. Если count является отрицательным числом, они вставляются перед столбцом с индексом col. В противном случае они вставляются после столбца с индексом col. Выбор очищается. Ключи ≈ те же, как при удаления столбца. pathName insert rows ?switches? index ?count? Вставляет count строк, начиная с индекса col. Если count является отрицательным числом, они вставляются перед строкой с индексом col. В противном случае они вставляются после строки с индексом col. Выбор очистится. Ключи ≈ те же, как для удаления строки. pathName reread Перечитывает старое содержимое ячейки снова в буфер редактирования. Полезно для обработки событий, когда <Escape> нажимается, чтобы прервать редактирование (стандартное поведение). pathName scan option args Эта команда используется, чтобы осуществить ⌠прокрутку■ таблицы. У нее есть две формы в зависимости от опций: pathName scan mark x y Запоминает текущие координаты x и y и вид таблицы; используется в связке с последующей scan dragto командой. Обычно эта команда вызывается по нажатию на кнопку ⌠Мыши■. Возвращает пустую строку. pathName scan dragto x y Эта команда вычисляет разность между текущими координатами y и x и координатами x и y, запомненными в последней команде scan mark для данного виджета. Затем она ⌠прокручивает■ таблицу на 5-кратную разность координат. Эта команда обычно вызывается при движении ⌠Мыши■ на таблице и используется для ускоренного просмотра таблицы. Возвращает пустую строку. pathName seeindex ⌠Прокручивает■ таблицу так, чтобы ячейка, заданная индексом, оказалась первой ячейкой с левого верхнего края таблицы (исключая строки и столбцы заголовков), если ячейка к настоящему времени не видна на экране. Фактическая ячейка может не оказаться самой первой, если за ней в таблице недостаточно ячеек, чтобы заполнить экран. pathName selectionoptionarg Эта команда используется, чтобы управлять выбором в таблице. У нее есть различные формы, в зависимости от опций: pathName selectionanchorinde Устанавливает якорь выбора в ячейке, заданной индексом. Якорь выбора является концом выбора, который фиксируется, пока второй конец области выбора передвигается с помощью ⌠Мыши■. Индекс anchor может использоваться для ссылок на соответствующую ячейку. pathName selection clear first ?last? Снимает выбор с выбранных ячеек от first до last (включительно). Состояние выбора для ячеек за пределами этой области не изменяется. Если first равно all, команда удаляет выбор из всех ячеек. pathName selection includesindex Возвращает `1▓, если ячейка, указанная индексом, выбрана, и `0▓ ≈ если нет. pathName selection set first ?last? Выбирает все ячейки в области от first до last включительно, не влияя на состояние выбора ячеек за пределами этой области. pathName set?row|col? index?value? ?index value ...? Для каждой пары index value устанавливает значение value в ячейке, определенной индексом. Проверка корректности значений при этом не производится. Если списку пар индекс-величина предшествует row или col, величина value рассматривается как Tcl список, и значения из списка устанавливаются в последовательных ячейках строки или колонки соответственно. Например, команда set row 2,3 {2,3 2,4 2,5} Установит значения в 3 ячейки, от 2,3 до 2,5. pathName tagoption?arg arg ...? Эта команда используется, чтобы управлять тэгами. Точное поведение команды зависит от значения опции и аргументов. Только опция cget требует использования реально существующих тэгов. В настоящее время поддерживаются следующие формы команды: pathName tag cell tagName?index ... ? Если команда задана без аргументов, то она распечатывает список ячеек, которые используют тэг. В противном случае она устанавливает тэг заданным ячейкам. Если тэг пустой ({}), ячейкам восстанавливается тэг по умолчанию. Тэги, добавленные с помощью опций -*tagcommand, здесь не обрабатываются. pathName tag cget tagNameoption Эта команда возвращает текущую величину опции option для тэга tagName. option может быть любой из опций, определенных для команды tag configure для таблиц. pathName tag col tagName?col ... ? Если команда задана без аргументов, то она распечатывает список колонок, которые используют данный тэг. В противном случае устанавливает тэг заданным столбцам. Если тэг пустой ({}), столбцам восстанавливается тэг по умолчанию. Тэги, добавленные с помощью опции -coltagcommand, здесь не обрабатываются. pathName tag configure tagName ?option? ?value? ?option value ...? Эта команда подобна команде configure для таблиц, за исключением того, что она изменяет опции, связыванные с тэгом tagName вместо модификации опций для всей таблицы. Если никакая опция не задана, команда возвращает список всех доступных опций для tag_Name (смотри Tk_ConfigureInfo для информации о формате этого списка). Если опция указана без величины, возвращается подсписок указанного списка, соответствующий указанной опции. Если указана одна или более пар опция- величина, то команда модифицирует данную опцию (опции) для указанного тэга; в этом случае команда возвращает пустую строку. См. "ТЭГИ". pathName tag delete tagName Удаляет тэг. Если тэг не существует, ошибки не возникает. pathName tag exists tagName Возвращает `1▓, если указанный тэг существует, и ▒0▓ ≈ в противном случае. pathName tag includes tagNameindex Возвращает `1▓, если ячейка с данным индексом имеет указанный тэг, и ▒0▓ ≈ в противном случае. pathName tag names ?pattern? Если никакой образец не задан, показывает имена всех определенных тэгов в таблице. В противном случае образец используется в качестве шаблона, и показываются только тэги, удовлетворяющие этому шаблону. pathName tag row tagName?row ...? Если команда задана без аргументов, то она распечатывает список строк, которые используют данный тэг. В противном случае она устанавливает данный тэг указанным строкам. Если тэг пустой ({}), строкам восстанавливается тэг по умолчанию. Тэги, добавленные с помощью опции √rowtagcommand, не обрабатываются здесь. pathName validateindex Явно проверяет корректность значения в ячейке, определенной индексом, с помощью команды, заданной опцией √validatecommand. Возвращает ▒0▓ или `1▓ в зависимости от результатов проверки. pathName width?col? ?value col value ...? Если никакой столбец не задан, возвращает список, описывающий все столбцы, для которых установлена ширина. Если столбец указан без указания ширины, команда возвращает ширину соответствующего столбца в символах (положительное число) или пикселях (отрицательное число). Если заданы одна или более пар колонка-величина, тогда команда устанавливает каждому перечисленному столбцу соответствующую ширину в символах (положительное число) или пикселях (отрицательное число). Если величина совпадает с шириной, задаваемой по умолчанию, колонка в дальнейшем будет использовать ширину, определенную с помощью опции -colwidth. pathName window option ?arg arg ...? Эта команда используется, чтобы управлять встроенными окнами. Точное поведение команды зависит от значения опции и аргументов. В настоящее время поддерживаются следующие формы команды: pathName window cget index option Эта команда возвращает текущую величину опции option для окна в ячейке с данным индексом. option может иметь любое из значений, допустимых для команды window configure. pathName window configureindex ?option? ?value? ?option value ...? Эта команда подобна команде configure для таблицы, за исключением того, что она изменяет опции, связанные с встроенным окном с данным индексом, а не опции таблицы в целом. Если опция указана без величины, возвращается подсписок указанного списка, соответствующий указанной опции. Если указана одна или более пар опция-величина, то команда модифицирует данную опцию (опции) для указанного окна; в этом случае команда возвращает пустую строку. См. "Встроенные окна". pathName window deleteindex ?index ...? Удаляет встроенное окно из таблицы. Соответствующее окно также будет удалено. pathName window move indexFrom indexTo Перемещает встроенное окно из одной ячейки в другую. Если в целевой ячейке уже существует другое окно, оно будет удалено. pathName window names ?pattern? Если никакой шаблон не задан, команда показывает все ячейки, в которых есть встроенные окна. В противном случае показывает только те ячейки, в которых есть встроенные окна с именами, удовлетворяющими шаблону. pathName xview args Эта команда используется для запросов о горизонтальной позиции таблицы в окне и для изменения горизонтальной позиции таблицы в окне. Команда может использоваться в одной из следующих форм: pathName xview
      Возвращает список, содержащий два элемента. Каждый из них является действительным числом из диапазона ▒0▓ √ `1▓. Они указывают соответственно левую и правую границы видимой области. Например, если первый элемент ≈ ⌠.2■ а второй элемент ≈ ⌠.6■, то 20% табличного текста выходит за пределы экрана слева, средние 40% текста видны в окне, и 40% текста выходит за пределы экрана вправо. Эти величины используются для конфигурации полос прокрутки с помощью команды, заданной опцией -xscrollcommand. pathName xview index
      ⌠Прокручивает■ таблицу так, чтобы столбец с данным индексом отображался на левом крае окна. pathName xview moveto fraction
      ⌠Прокручивает■ таблицу так, чтобы доля общей ширины табличного текста, выходящая за пределы экрана влево, равнялась fraction. fraction должно быть дробью между ▒0▓ и `1▓. pathName xview scroll numberwhat Эта команда ⌠прокручивает■ таблицу влево или вправо на заданное расстояние. number должно быть целым числом. what должно быть units или pages или сокращением одного из их. Если what равно units, таблица сдвигается на number символов (символ равен ширине символа 0); если what равно pages, таблица сдвигается на соответствующее число экранов. Если number является отрицательным числом, тогда более левые символы становятся видимыми; если number √ положительное число, тогда более правые символы становятся видимыми. pathName yviewargs Эта команда используется для запросов о вертикальной позиции таблицы в окне и для изменения вертикальной позиции таблицы в окне. Команда может использоваться в одной из следующих форм: pathName xview Возвращает список, содержащий два элемента. Каждый из них является действительным числом из диапазона ▒0▓ √ `1▓. Они указывают соответственно верхнюю и нижнюю границы видимой области (например, `.5▓ означает середину таблицы) Эти величины используются для конфигурации полос прокрутки с помощью команды, заданной опцией
    -yscrollcommand.
    pathName yview index ⌠Прокручивает■ таблицу так, чтобы строка с данным индексом отображалась на верхнем крае окна. pathName yview moveto fraction ⌠Прокручивает■ таблицу так, чтобы доля общей высоты табличного текста, выходящая за пределы экрана вверх, равнялась fraction. fraction должно быть дробью между ▒0▓ и `1▓. pathName yview scroll number what Эта команда ⌠прокручивает■ таблицу вверх или вниз на заданное расстояние. number должно быть целым числом. what должно быть units или pages или сокращением одного из их. Если what равно units, таблица сдвигается на number строк текста; если what равно pages, таблица сдвигается на соответствующее число экранов. Если number является отрицательным числом, тогда более ранние символы становятся видимыми; если number √ положительное число, тогда более поздние символы становятся видимыми.
    СТАНДАРТНОЕ ПОВЕДЕНИЕ
      Вновь созданная таблица обладает следующим поведением.

    [1] Нажатие левой кнопки ⌠Мыши■ в ячейке активизирует эту ячейку. Нажатие кнопки ⌠Мыши■ в уже активной ячейке перемещает курсор вставки на ближайший символ.

    [2] Перемещение курсора ⌠Мыши■, при нажатой левой кнопке, позволяет выделить область таблицы. Выход курсора из таблицы вниз, при нажатой левой кнопке ⌠Мыши■, обеспечивает прокрутку таблицы одновременно с выделением ячеек.

    [3] Перемещение курсора ⌠Мыши■, при нажатой средней кнопке ⌠Мыши■, обеспечивает прокрутку таблицы без выделения.

    [4] Клавиша Home возвращает к началу таблицы.

    [5] Клавиша End перемещает в конец таблицы.

    [6] Сочетание клавиш Control-Home перемещает в начало таблицы и активизирует первую ячейку.

    [7] Сочетание клавиш Control-End перемещает в конец таблицы и активизирует последнюю ячейку.

    [8] Сочетание клавиш Shift-Control-Home расширяет выделенную область таблицы до ее начала.

    [9] Сочетание клавиш Shift-Control-End расширяет выделенную область таблицы до ее конца.

    [10] Клавиши с изображениями стрелок позволяют выбрать соседнюю ячейку в соответствующем направлении.

    [11] Сочетание клавиш Shift-<arrow> расширяет выбранную область в направлении, указываемом стрелкой.

    [12] Сочетание клавиш Control-leftarrow и Control-rightarrow перемещают курсор вставки внутри ячейки.

    [13] Сочетание клавиш Control-slash выбирает все ячейки.

    [14] Сочетание клавиш Control-backslash clears снимает выбор со всех ячеек.

    [15] Клавиша Backspace удаляет символ перед курсором вставки в активной ячейке.

    [16] Клавиша Delete удаляет символ после курсора вставки в активной ячейке.

    [17] Клавиша Escape перечитывает содержимое активной ячейки из заданного источника данных, отменяя любые изменения, выполненные в ячейке.

    [18] Сочетание клавиш Control-a перемещает курсор вставки в начало активной ячейки.

    [19] Сочетание клавиш Control-e перемещает курсор вставки в конец активной ячейки.

    [20] Control-minus и Control-equals уменьшает и увеличивает ширину столбца, содержащего активную ячейку.

    [21] Перемещение курсора ⌠Мыши■ с нажатой правой кнопкой когда курсор находится на границе ячейки вызовет изменение размеров строки и/или столбца, (при соответствующей величине опция √resizeborders).

    Поведение таблицы может незначительно отличаться от описанного выше в зависимости от значения опции -selectionmode.

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

    Поведение таблиц может изменяться путем определения новых событий для конкретной таблицы или путем переопределения событий для всего класса. Описание стандартных событий приведено в файле tkTable.tcl.

    text
    Создание текстового примитива и управление им.
     
  • Синтаксис
  • Стандартные параметры
  • Дополнительные параметры примитва
  • Описание
  • Индексы
  • Теги
  • Метки
  • Вставленные окна
  • Вставленные изображения
  • Выделение
  • Курсор ввода
  • Команда примитива
  • Привязки
  • Вопросы производительности
  • СИНТАКСИС  
    text имяПути параметры
    СТАНДАРТНЫЕ ПАРАМЕТРЫ
       
    -background -highlightbackground -insertontime
    -selectborderwidth  -borderwidth -highlightcolor
    -insertwidth -selectforeground -cursor
    -highlightthickness -padx -setgrid
    -exportselection -insertbackground -pady
    -takefocus -font -insertborderwidth
    -relief -xscrollcommand -foreground
    -insertofftime -selectbackground -yscrollcommand
    Подробное описание этих параметров приведено в разделе options. ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА
        Имя параметра: -height
    Имя в Базе: height
    Класс в Базе: Height


    Задает желаемую высоту окна в символах; размер символа определяется шрифтом, который задан параметром -font. Значение параметра должно быть не меньше единицы.
     

    Имя параметра: -spacing1
    Имя в Базе: spacing1
    Класс в Базе: Spacing1


    Запрашивает дополнительный промежуток перед каждой строкой текста в примитиве (в любой из разрешенных форм для расстояний на экране). При переносе строки заданное значение относится только к первой строчке на экране. Параметр -spacing1 в тегах подавляет данный.
     

    Имя параметра: -spacing2
    Имя в Базе: spacing2
    Класс в Базе: Spacing2
    Задает величину дополнительного промежутка между двумя последовательными строчками на экране, полученными в результате переноса одной строки текста (в любой из разрешенных форм для расстояний на экране). Параметр √spacing2 в тегах подавляет данный.  
    Имя параметра: -spacing3
    Имя в Базе: spacing3
    Класс в Базе: Spacing3


    Запрашивает дополнительный промежуток после каждой строкой текста в примитиве (в любой из разрешенных форм для расстояний на экране). При переносе строки заданное значение относится только к последней строчке на экране. Параметр -spacing3 в тегах подавляет данный.
     

    Имя параметра: -state
    Имя в Базе: state
    Класс в Базе: State


    Задает одно из двух состояний текста: нормальное (normal) или недоступное (disabled). Текст, находящийся в недоступном состоянии, нельзя редактировать и в нем не отображается курсор ввода, даже если данный примитив находится в фокусе ввода.
     

    Имя параметра: -tabs
    Имя в Базе: tabs
    Класс в Базе: Tabs
    Задает набор положений табулятора в окне. Значение параметра представляет собой список расстояний на экране, задающих эти положения. Элемент списка, следующий за элементом, который указывает очередное положение табулятора, может описывать способ расположения текста относительно этого положения с помощью ключевых слов left, right, center или numeric. Значение по умолчанию равно left; в этом случае левый край текста, следующего за символом табуляции, располагается в позиции табуляции. Right означает, что в позиции табуляции располагается правый край текста, следующего за символом табуляции, а center указывает на необходимость центрировать текст относительно позиции табуляции. Numeric означает, что в позиции табуляции следует располагать десятичную точку текста; если в тексте нет десятичной точки, то младшая значащая цифра числа располагается непосредственно слева от позиции табуляции; если в тексте нет чисел, то он выравнивается вправо по позиции табуляции. Например, задание параметра -tabs {2c left 4c 6c center} приводит к созданию трех позиций табулятора с двухсантиметровым интервалом, первые два из которых используют выравнивание влево, а третья ≈ выравнивание по центру. Если в списке положений табулятора их оказывается недостаточно, чтобы обеспечить все символы табуляции в строке текста, то Tk создает дополнительные позиции табуляции, экстраполируя промежуток и способ выравнивания текста, указанные последним элементом списка. Параметр -tabs в тегах подавляет данный. Если параметр -tabs не задан или его значением является пустая строка, то Tk использует табуляцию по умолчанию ≈ с шагом, равным восьми символам среднего размера.  
    Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width


    Задает желаемую ширину окна в символах; размер символа определяется шрифтом, который задан параметром -font. Если ширина символа в шрифте непостоянна, то для перевода числа символов в единицы экрана используется ширина символа ⌠0■.
     

    Имя параметра: -wrap
    Имя в Базе: wrap
    Класс в Базе: Wrap
    Задает способ обращения с чересчур длинными строками, которые не помещаются в одной строчке экрана. Может принимать одно из значений none, char или word. Значение none указывает на то, что каждая строка текста отображается в единственной строчке экрана ≈ не поместившиеся символы не выводятся. В остальных двух режимах при необходимости осуществляется перенос каждой строки текста, чтобы все ее содержимое отображалось на экране. В режиме char переход на новую строчку можно осуществлять после любого символа; в режиме word перенос строки выполняется только после конца слова.

    ОПИСАНИЕ

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

    Текстовый примитив предназначен для вывода одной или нескольких строк текста и для редактирования этого текста. Текстовые примитивы поддерживают четыре способа отметить часть текста ≈ так называемые теги, метки, вставленные окна и вставленные изображения. Теги позволяют выводить различные части текста различными шрифтами и цветом. Кроме того с тегами можно связать команды Tcl, которые будут выполняться каждый раз при совершении определенных действий, ≈ например, при нажатиях на клавиши клавиатуры и ⌠Мыши■, если курсор находится в определенной части текста. Подробно эти возможности описаны ниже (см. ⌠Теги■).

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

    Третий способ обеспечивает возможность вставки в текст произвольных окон. Подробно эти возможности описаны ниже (см. ⌠Вставленные окна■).

    Четвертый способ обеспечивает возможность вставки в текст изображений Tk. Подробно эти возможности описаны ниже (см. ⌠Вставленные изображения

    ИНДЕКСЫ Аргументами многих команд примитива являются один или несколько индексов. Индекс представляет собой строку, указывающую конкретное место в тексте ≈ например, место вставки текста или один из граничных символов удаляемого участка текста. Индексы имеют следующий синтаксис:

    база модификатор модификатор модификатор ...

    База ≈ это указатель начальной точки, а модификаторы указывают сдвиг от начальной точки (например, на один символ влево или вправо от базы). База является обязательной частью индекса, а модификаторы ≈ необязательной. База индекса должна быть представлена в одном из следующих видов:

    строка.сим

    Указывает на символ с номером сим в строке с номером строка. Для совместимости с другими программами ОС UNIX, использующими тот же подход к нумерации, строки нумеруются, начиная с ⌠1■. Нумерация символов в строке начинается с ⌠0■. Если значением сим является end, то база ссылается на символ перевода строки, завершающий строку. @x,y Указывает на символ, в котором находится точка с координатами в окне текста равными x и y. end Указывает на конец текста (на символ, следующий непосредственно за последним символом перехода на новую строку). метка Указывает на символ, следующий непосредственно за меткой с именем метка. тег.first Указывает на первый символ в тексте, помеченный тегом с именем тег. Если в тексте нет символов, помеченных тегом, то возникает ошибка. тег.last Указывает на символ, непосредственно следующий за последним символом, помеченным тегом с именем тег. Если в тексте нет символов, помеченных тегом, то возникает ошибка. имяПути Указывает положение вставленного окна с именем имяПути. Если вставленное окно с заданным именем отсутствует, то возникает ошибка. имяИзобр Указывает положение вставленного изображения с именем имяИзобр. Если вставленное изображение с заданным именем отсутствует, то возникает ошибка. Если вид базы не определяется однозначно (так, например, если метка и имяИзобр имеют одинаковое значение, то их нельзя различить), то предпочтение отдается виду, встречающемуся в приведенном списке раньше. Если за индексом базы идут модификаторы, то каждый из них должен быть представлен в одном из описанных ниже видов. Ключевые слова, например, chars или wordend, можно сокращать, если результат сокращения позволяет однозначно восстановить слово.

    + счет chars

    Увеличивает индекс на счет символов, при необходимости переходя на следующую строку. Если за символом с текущим индексом следует меньше символов, чем счет, то индекс устанавливается на последний символ в тексте. Пробелы по обе стороны от значения счет необязательны. - счет chars Уменьшает индекс на счет символов, при необходимости переходя на предыдущую строку. Если перед символом с текущим индексом идет меньше символов, чем счет, то индекс устанавливается на первый символ в тексте. Пробелы по обе стороны от значения счет необязательны. + счет lines Увеличивает индекс на счет строк, сохраняя номер символа в строке. Если за строкой с текущим индексом следует меньше строк, чем счет, то индекс устанавливается на символ с тем же номером в последней строчке текста. Если длина строки с новым положением индекса меньше номера символа, то индекс указывает на последний символ в этой строке (символ перевода строки). Пробелы по обе стороны от значения счет необязательны. - счетlines Уменьшает индекс на счет строк, сохраняя номер символа в строке. Если перед строкой с текущим индексом идет меньше строк, чем счет, то индекс устанавливается на символ с тем же номером в первой строчке текста. Если длина строки с новым положением индекса меньше номера символа, то индекс указывает на последний символ в этой строке (символ перевода строки). Пробелы по обе стороны от значения счет необязательны. linestart Устанавливает индекс на первый символ в строке. lineend Устанавливает индекс на последний символ в строке (символ перевода строки). wordstart Устанавливает индекс на первый символ в слове, содержащем символ с текущим значением индекса. Слово представляет собой последовательность букв, цифр или символов подчеркивания (состоящую, быть может, из одного символа). wordend Устанавливает индекс на первый символ в слове, содержащем символ с текущим значением индекса. Если текущее значение индекса и без того указывает на последний символ в слове, то оно не изменяется. Если в команде задано несколько модификаторов, то они применяются слева направо. Так, например, индекс ⌠end-1 chars⌠ указывает на предпоследний символ в тексте, а индекс ⌠insert wordstart-1 c⌠ указывает на символ, непосредственно предшествующий первому символу в слове, содержащем символ с текущим значением индекса.
    ТЕГИ Участки текста можно помечать с помощью тегов. Тег представляет собой символьную строку, которая привязана к некоторым символам текста. В принципе теги могут содержать любые символы, однако использования символов ⌠ ■ (пробел), ⌠+■ и ⌠-■ лучше избегать: это специальные символы индексов и использование тега, в котором присутствуют такие символы, в качестве индекса невозможно. С символами данного текста можно связать произвольное количество тегов. Каждый тег может относиться к одному символу, последовательности символов или к нескольким последовательностям символов. С отдельным символом может быть связано произвольное количество тегов.

    Все теги упорядочены; на этот порядок опираются некоторые из описываемых ниже функций работы с тегами. При определении тега (путем связывания его с символами, или при установке параметров его представления на экране, или при привязке к нему команд) он получает более высокий приоритет, чем все существующие теги. Приоритетный порядок тегов можно изменить с помощью команд примитива ⌠имяПути tag raise⌠ и ⌠ имяПути tag lower⌠.

    В текстовых примитивах теги служат для достижения трех целей. Во-первых, они управляют отображением информации на экране. По умолчанию способ отображения текста определяется значениями параметров background, font и foreground текстового примитива. Однако команда примитива ⌠имяПути tag configure⌠ позволяет связать с каждым тегом свои значения параметров отображения. Если с символом связан тег, то значения параметров отображения для этого тега подавляют значения по умолчанию. В настоящее время для тегов можно пользоваться следующими параметрами:

    -background цвет

    Параметр цвет задает цвет фона для изображения символов, связанных с данным тегом. Его значение может быть представлено в любом виде, приемлемом для Tk_GetColor. -bgstipple двуцвет Параметр двуцвет задает двуцветное изображение, предназначенное для вывода в качестве фона для текста. Его значение может быть представлено в любом виде, приемлемом для Tk_GetBitmap. Если параметр двуцвет не задан или его значением является пустая строка, то используется равномерное заполнение фона. -borderwidth пиксели Параметр пиксели задает ширину трехмерного бордюра, окружающего фон. Его значение может быть представлено в любом виде, приемлемом для Tk_GetPixels. Этот параметр используется в сочетании с параметром -relief для описания трехмерного представления фона для символов; если параметр -background для тега не задан, то параметр -borderwidth игнорируется. -fgstipple двуцвет Параметр двуцвет задает двуцветное изображение, предназначенное для вывода в качестве фона для рисования текста и другой информации переднего плана (например, подчеркивания). Его значение может быть представлено в любом виде, приемлемом для Tk_GetBitmap. Если параметр двуцвет не задан или его значением является пустая строка, то используется равномерное заполнение фона. -font имяШрифта Параметр имяШрифта задает имя шрифта для изображения символов. Его значение может быть представлено в любом виде, которы описан в команде font . -foreground цвет Параметр цвет задает цвет символов текста и другой информации переднего плана, например, подчеркивания. Его значение может быть представлено в любом виде, приемлемом для Tk_GetColor. -justify вырав Если первый символ строчки на экране связан с тегом, для которого задан такой параметр, то значение параметра определяет способ выравнивания текста в строчке. Параметр вырав может принимать значения left, right и center. При переносе строки выравнивание каждой из получившихся строчек на экране определяется первым символом этой строчки. -lmargin1 пиксели Если первый символ строчки на экране связан с тегом, для которого задан такой параметр, то значение параметра пиксели задает величину отступа от левого края окна. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. При переносе строки этот параметр применяется только к первой строчке на экране; отступом остальных строк управляет параметр -lmargin2. -lmargin2 пиксели Если первый символ строчки на экране связан с тегом, для которого задан такой параметр, и если строчка на экране не является первой строчкой строки текста (т.е. она представляет собой часть перенесенной строки текста), то значение параметра пиксели задает величину отступа данной строчки от левого края окна. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. Этот параметр используется только если допускается перенос строки; он применяется только ко второй и последующим перенесенным строчкам. -offset пиксели Параметр пиксели задает величину сдвига (в пикселях) по вертикали базиса строки текста от базиса основной строки. Например, для верхних индексов базисная строка сдвигается вверх, а для нижних ≈ вниз. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. -overstrike булевское Указывает, следует ли проводить горизонтальную прямую посередине символов. Значение параметра булевское может быть представлено в любом виде, приемлемом для Tk_GetBoolean. -relief обвид Значение параметра обвид задает объемный вид фона в любом виде, приемлемом для Tk_GetRelief. Этот параметр используется в сочетании с параметром -borderwidth для установления трехмерного вида фона для символов; если параметр -background для данного тега не установлен, то параметр -relief игнорируется. -rmargin пиксели Если первый символ строчки на экране связан с тегом, для которого задан такой параметр, то значение параметра пиксели задает величину отступа между последним символом строчки и правым краем окна. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. Этот параметр используется только, если перенос строки допустим. При переносе строки этот параметр применяется только ко всем перенесенным строчкам. -spacing1 пиксели Параметр пиксели задает размер дополнительного пространства над каждой строкой текста. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. При переносе строки этот параметр применяется только к первой строчке на экране. -spacing2 пиксели Параметр пиксели задает размер дополнительного пространства над каждой перенесенной строчкой из строчек, составляющих одну строку текста. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. -spacing3 пиксели Параметр пиксели задает размер дополнительного пространства под каждой строкой текста. Значение параметра пиксели представляет собой расстояние на экране в любом допустимом виде. При переносе строки этот параметр применяется только к последней строчке на экране. -tabs списТаб Параметр списТаб задает набор положений табулятора в том же виде, что и параметр -tabs для текстового примитива. Этот параметр относится к строке текста только в том случае, если он связан с первым символом строки. Если значением параметра является пустая строка, то параметр считается не заданным для данного тега (по умолчанию). Если значением параметра является не пустая строка, а пустой список (например, установка параметра имеет вид -tags { }), то его значением считается стандартный набор 8-символьных позиций табулятора (см. описание параметра -tags для примитива). -underline булевское Параметр булевское указывает, следует ли подчеркивать символы. Значение параметра булевское может быть представлено в любом виде, приемлемом для Tk_GetBoolean. -wrap режим Параметр режим задает способ обработки строк, длина которых превышает ширину текстового окна. Допустимые значения параметра те же, что и у параметра -wrap текстового примитива: none, char и word. Если этот параметр задан, то он подавляет параметр -wrap текстового примитива. Если с символом связано несколько тегов, причем задаваемые ими параметры вывода противоречат друг другу, то используются значения параметров тегов с наивысшим приоритетом. Если некоторый параметр вывода для конкретного тега не задан или если его значением является пустая строка, то этот параметр при выводе не используется; вместо него берется параметр тега со следующим приоритетом. Если ни один из тегов не определяет параметра вывода, то используется стиль, принятый для данного примитива по умолчанию.

    Во-вторых, теги служат для привязки событий. Привязки к тегу осуществляются практически таким же образом, как и привязки к классу примитива: заданная команда Tcl исполняется всякий раз, когда на символе с данным тегом происходит указанное событие. С помощью привязок к тегам можно задать поведение групп символов; помимо прочего таким образом можно реализовать некоторые свойства гипертекста. Подробное описание этих возможностей см. ниже в описании команды примитива tag bind.

    Третья задача тегов ≈ обеспечивать управление выделениями(См. "Выделение " ).

    МЕТКИ

    Метки представляют собой другой способ отмечать части текста. Они служат для запоминания фиксированных мест в тексте. Метки похожи на теги в том, что они поименованы и ссылаются на определенные места в тексте, однако они не связаны ни с какими конкретными символами. Напротив, метка указывает на промежуток между двумя символами. В каждый момент времени метка указывает в точности на одно положение. При удалении символов, окружающих положение метки, сама метка сохраняется, меняются лишь ее соседи. Теги же теряют привязку к символам при удалении этих символов. Для работы с метками предназначена команда примитива ⌠имяПутиmark⌠; имя метки можно использовать в качестве индекса в командах примитива ≈ этот индекс указывает на текущее положение метки.

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

    Пространства имен меток и тегов различны: одинаковые имена могут использоваться для метки и тега; при этом они будут ссылаться на различные объекты.

    У двух меток есть особый смысл. Метка insert связана с курсором ввода; см. описание ниже (см. Курсор ввода■). Метка current связана с символом, ближайшим к курсору ⌠Мыши■, ее положение меняется автоматически при изменении позиции курсора и любых изменениях текста в примитиве (с одним исключением: метка current не обновляется в ответ на изменение положения курсора при нажатой клавише ⌠Мыши■; обновление откладывается до момента, когда все клавиши ⌠Мыши■ будут отпущены). Ни одну из этих двух специальных меток нельзя удалить.

    ВСТАВЛЕННЫЕ ОКНА Вставленное окно ≈ это третий тип ссылок в текстовом примитиве. Ссылка на вставленное окно приводит к появлению окна в заданном месте текста. В текстовом примитиве может быть любое количество вставленных окон; в качестве вставленного окна может быть использован любой примитив (при соблюдении обычных ограничений управления геометрией, согласно которым текстовое окно должно быть непосредственным предком вставленного окна или потомком этого предка). Положение вставленного окна меняется при редактировании или прокрутке текста; окно выводится или стирается в зависимости от того, попадает ли оно в видимую часть текста. Вставленное окно считается одним символом в индексном пространстве текстового примитива; на него можно сослаться либо по имени текстового окна, либо по значению индекса в индексном пространстве. При удалении области текста, содержащей вставленное окно, оно разрушается.

    При добавлении в текстовый примитив вставленного окна с помощью команды примитива window create с ним можно связать несколько параметров конфигурации. Значения этих параметров можно впоследствии изменить командой примитива window configure. В настоящее время поддерживаются следующие параметры:

    -align где

    Если высота вставленного окна отличается от высоты строчки, в которой оно выводится, то этот параметр определяет место, где выводится окно. Параметр где может принимать следующие значения: top (верхушка окна совпадает с верхней частью строчки), center (окно центрируется в области строчки), bottom (нижняя часть окна совпадает с нижней частью строчки) и baseline (нижняя часть окна совпадает с базой строчки). -create скрипт Задает скрипт Tcl, выполняемый для создания вставленного окна. Этот скрипт выполняется при выводе окна, если для окна не был указан параметр -window. Скрипт создает окно и возвращает в качестве результата имя этого окна. Если окно удаляется, то при его повторном выводе снова исполняется тот же скрипт. -padx пиксели Параметр пиксели задает размер дополнительного пространства, которое следует оставить по обе стороны вставленного окна. Его значение представляет собой расстояние на экране в любом допустимом виде. -pady пиксели Параметр пиксели задает размер дополнительного пространства, которое следует оставить сверху и снизу от вставленного окна. Его значение представляет собой расстояние на экране в любом допустимом виде. -stretch булевское Параметр указывает, следует ли вытягивать вставленное окно до высоты строчки, если запрошенная для него высота меньше высоты строчки, на которой это окно выводится. Если для окна задан также параметр -pady, то запрошенное этим параметром обрамление сохраняется и при вытягивании окна. -window имяПути Задает имя выводимого окна.
    ВСТАВЛЕННЫЕ ИЗОБРАЖЕНИЯ Последним видом пометок в текстовых примитивах являются вставленные изображения. Такая пометка приводит к выводу изображения в заданном месте текста. В текстовом примитиве может присутствовать произвольное количество вставленных изображений, а одно и то же изображение может вставляться в произвольном количестве мест в тексте. Положение вставленного изображения меняется при редактировании или прокрутке текста. Вставленное изображение считается одним символом в индексном пространстве текстового примитива; на него можно сослаться либо по значению индекса в индексном пространстве, либо по имени, которое оно получает при создании командой image create. При удалении области текста, содержащей вставленное изображение, данная его копия стирается с экрана.

    При добавлении в текстовый примитив вставленного изображения с помощью команды примитива image create команда возвращает уникальное имя данного вхождения изображения в текст. Это имя в дальнейшем можно использовать для ссылок на вхождение изображения. Имя совпадает со значением параметра -name (см. ниже). Если параметр -name не задан, то вместо него используется имя -image . Если значение имяИзобр уже использовано в примитиве, то к нему дописываются символы #nn, где nn ≈ произвольное целое число. Таким образом обеспечивается уникальность имени. После присвоения имени данному вхождению изображения это имя в дальнейшем не меняется, несмотря на то, что значения параметров -image и -name можно поменять с помощью команды image configure.

    При добавлении в текстовый примитив вставленного изображения с помощью команды примитива image create с ним можно связать несколько параметров конфигурации. Значения этих параметров можно впоследствии изменить командой примитива image configure. В настоящее время поддерживаются следующие параметры:

    -align где

    Если высота вставленного изображения отличается от высоты строчки, в которой оно выводится, то этот параметр определяет место, где выводится изображение. Параметр где может принимать следующие значения: top (верхушка изображения совпадает с верхней частью строчки), center (изображение центрируется в области строчки), bottom (нижняя часть изображения совпадает с нижней частью строчки) и baseline (нижняя часть изображения совпадает с базой строчки). -image изобр Задает имя выводимого изображения Tk. Если значение параметра не является допустимым именем изображения, то возвращается сообщение об ошибке. -name ИмяИзобр Задает имя ссылки на данное вхождение изображения. Если параметр ИмяИзобр не задан, то именем служит имя изображения Tk. Если значение параметра ИмяИзобр уже использовалось, то к нему приписываются символы #nn, как описано выше. -padx пиксели Параметр пиксели задает размер дополнительного пространства, которое следует оставить по обе стороны вставленного изображения. Его значение представляет собой расстояние на экране в любом допустимом виде. -pady пиксели Параметр пиксели задает размер дополнительного пространства, которое следует оставить сверху и снизу от вставленного изображения. Его значение представляет собой расстояние на экране в любом допустимом виде.
    ВЫДЕЛЕНИЕ Выделение реализуется с помощью тегов. Если параметр exportSelection текстового примитива имеет значение истина, то с выделением ассоциируется тег sel:

    Если некоторые символы помечены тегом sel, то текстовый примитив притязает на владение выделением.

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

    Если выделение запрашивается другим приложением или другим окном данного приложения, то тег sel снимается со всех символов текста.

    Тег sel определяется автоматически при создании текстового примитива; его нельзя удалить командой примитива ⌠имяПути tag delete⌠. Кроме того параметры selectBackground, selectBorderWidth и selectForeground текстового примитива связаны с параметрами -background, -borderwidth и -foreground тега sel: изменение одного из этих параметров примитива автоматически вызывает изменение соответствующего параметра тега и наоборот.

    КУРСОР ВВОДА Метка с именем insert имеет в текстовых примитивах специальное значение. Она определяется автоматически при создании примитива и ее нельзя отменить командой примитива ⌠имяПутиmark unset⌠. Метка insert задает положение курсора ввода; курсор ввода отображается в этом положении всякий раз, когда текстовый примитив попадает в фокус ввода. КОМАНДА ПРИМИТИВА Команда text создает новую команду Tcl, имя которой совпадает с именем текстового окна. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

    имяПути параметр арг арг ...

    имяПути является именем команды; оно совпадает с именем пути текстового примитива. Параметр и аргументы уточняют поведение команды. Текстовые примитивы допускают следующие формы команды: имяПутиbbox индекс Возвращает список из четырех элементов, описывающий область экрана, занимаемую символом с индексом индекс. Первые два элемента списка представляют собой координаты x и y верхнего левого угла этой области; последние два ≈ это ее ширина и высота. Если символ виден на экране лишь частично, то возвращаемые значения описывают видимую часть области. Если символ на экране не виден, то возвращаемое значение является пустым списком. имяПути cget параметр Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды text. имяПути compare индекс1 оп индекс2 Сравнивает индексы, задаваемые параметрами индекс1 и индекс2, в соответствии с оператором отношения, задаваемым параметром оп; команда возвращает `1▓, если указанное отношение выполняется, и ▒0▓ в противном случае. Параметр оп может принимать одно из значений `<▓, `<=▓, `=▓, `>=▓, `>▓ или `!=▓. Если значением оператора является `=▓, то команда возвращает `1▓, если оба индекса ссылаются на один и тот же символ; при операторе `<▓ команда возвращает `1▓, если индекс1 ссылается на символ, предшествующий символу с индексом индекс2, и т.д. имяПути configure параметр значение параметр значение ... Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды text. имяПути debug ?булевское? Если задан параметр булевское, то он может иметь значение истина или ложь в виде, приемлемом для Tcl_GetBoolean. Если значение параметра истина, то в B-дереве, связанном с текстовыми примитивами, будет выполняться внутренняя проверка согласованности. В противном случае эта проверка будет отключена. Независимо от полученного значения команда возвращает пустую строку. Если параметр булевское не задан, то команда возвращает on или off в зависимости от того, подключена или нет в момент выполнения команды система отладки. Переключатель отладки один на все текстовые примитивы: изменение его значения в одном примитиве приводит к изменению этого значения для всех примитивов. Проверка согласованности для примитивов с длинными текстами может привести к существенному замедлению работы.

    имяПути deleteиндекс1 ? индекс 2?

    Удаляет последовательность символов в тексте. Если заданы оба параметра индекс1 и индекс2, то удаляются все символы, начиная с символа с индексом индекс1, и кончая символом, непосредственно предшествующим символу с индексом индекс2 (т.е. символ с индексом индекс2 не удаляется). Если параметр индекс2 не задан, то удаляется только символ с индексом индекс1. Невозможно такое удаление, при котором последний символ оставшегося текста не будет символом перевода строки. Команда возвращает пустую строку. имяПути dlineinfo индекс Возвращает список из пяти элементов, описывающий область экрана, занимаемую строчкой, содержащей символ с индексом индекс. Первые два элемента списка представляют собой координаты x и y верхнего левого угла этой области; следующие два ≈ это ее ширина и высота; пятый элемент ≈ это расстояние от верхней границы области вниз до базы строчки. Все значения измеряются в пикселях. Если текущий режим переноса строки имеет значение none и строка видна на экране лишь частично, то возвращаемые значения описывают всю область строки, включая и ее невидимые части. Если строчка короче полной ширины экрана, то возвращаемые значения описывают только ту ее часть, которая занята символами и вставленными окнами. Если строчка, содержащая символ с индексом индекс, на экране не видна, то возвращаемое значение является пустым списком. имяПути dump ?переключатели? индекс1 ?индекс2? Возвращает содержимое текстового примитива от символа с индексом индекс1 до символа с индексом индекс2 (не включая последний), включая сам текст, а также информацию о метках, тегах и вставленных окнах. Если параметр индекс2 не задан, то по умолчанию описывается символ с индексом индекс1. Возвращаемая информация имеет следующий формат: ключ1 значение1 индекс1 ключ 2 значение 2 индекс 2 ... Ключи могут принимать значения text, mark, tagon, tagoff и window. Соответствующими возвращаемыми значениями будут текст, имя метки, имя тега или имя окна. Возвращаемыми значениями индекса будут индекс начала текста, метки, тегового перехода или окна. Для управления результатом можно использовать один или несколько из следующих переключателей (или их аббревиатур): -all Возвращается информация обо всех элементах ≈ тексте, метках, тегах и окнах. Это значение принято по умолчанию. -command команда В этом случае вместо возвращения информации об элементах текстового примитива на каждом из этих элементов в указанной области текста выполняется команда. Аргументами команды служат ключ, значение и индекс соответствующего элемента. -mark Включить в результат информацию о метках. -tag Включить в результат информацию о теговых переходах. Информация о тегах возвращается в виде элементов tagon и tagoff, указывающих соответственно начало и конец каждой области тега. -text Включить в результат информацию о тексте. Значением служит текст до следующего элемента или до конца области, указанного параметром индекс2. Текстовый элемент не захватывает новых строк. Часть текста, содержащая несколько строк и не включающая меток и теговых переходов, будет выводиться в виде набора отрезков текста, каждый из которых кончается символом перевода строки. Эти символы являются частью результата. -window Включить в результат информацию о вставленных окнах. Значением является имя Tk пути вставленного окна, за исключением случая, когда окно еще не создано. (Окно должно содержать создающий скрипт.) В последнем случае результатом служит пустая строка, а дополнительную информацию об окне можно получить, задав значение его индекса. имяПути get индекс1 ? индекс 2? Возвращает последовательность символов в тексте. В последовательность включаются все символы текста, начиная с символа с индексом индекс1 и кончая символом, непосредственно предшествующим символу с индексом индекс2 (символ с индексом индекс2 в эту последовательность не входит). Если параметр индекс2 опущен, то команда возвращает единственный символ с индексом индекс1. Если в указанном интервале нет символов (например, если индекс1 указывает за конец файла или значение индекс2 меньше, чем индекс1), то команда возвращает пустую строку. Если в указанном интервале есть вставленные окна, то информация о них в возвращаемую строку не входит. имяПути image параметр ?арг арг ...? Команда предназначена для управления вставленными изображениями. Поведение команды определяется значением аргумента параметр. В настоящее время поддерживаются следующие формы команды: имяПути image cget индекс параметр Возвращает значение параметра конфигурации вставленного изображения. Аргумент индекс указывает вставленное изображение, а параметр задает имя требуемого параметра конфигурации; это имя должно быть элементом списка, приведенного (см. ⌠Вставленные изображения■). имяПути image configureиндекс ?параметр значение ...? Запрашивает значение параметров вставленного изображения или изменяет эти значения. Если ни один аргумент параметр не задан, то возвращает список, содержащий значения всех наличных параметров вставленного изображения с индексом индекс (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его значение нет, то команда возвращает часть списка, относящуюся к данному параметру. Если задано несколько пар параметр-значение, то команда придает указанным параметрам новые значения; в этом случае команда возвращает пустую строку. Описание поддерживаемых параметров (см.Вставленные изображения■). имяПути image createиндекс ?параметр значение ...? Команда создает новую ссылку на изображение, которое появляется в тексте в положении, указанном аргументом индекс. Для установки параметров конфигурации изображения можно указать произвольное число пар параметр-значение. Команда возвращает уникальный идентификатор, который можно использовать в качестве индекса при ссылке на данное изображение. Описания поддерживаемых параметров и возвращаемого идентификатора см. ⌠Вставленные изображения■. имяПути image names Возвращает список, элементами которого служат имена всех вхождений изображений, вставленных в данное окно. имяПути index индекс Возвращает положение символа с индексом индекс; положение выдается в виде строч.симв, где строч ≈ это номер строчки, а симв ≈ номер символа в этой строчке. Аргумент индекс может иметь любую из форм, описанных выше (см. Индексы). имяПути insert индекс символы ?списТегов символы списТегов...? Вставляет значения всех аргументов символы непосредственно перед символом с индексом индекс. Если индекс ссылается на конец текста (т.е. на символ, следующий за последним символом перевода строки), то новый текст вставляется непосредственно перед последним символом перевода строки. Если у команды один аргумент символы, а аргументы списТегов отсутствуют, то ко вновь введенному тексту будут приписаны все теги, присутствующие у обоих символов слева и справа от нового текста; если тег приписан лишь к одному из соседних символов, то на вновь введенный текст он не распространяется. Аргументы списТегов представляют собой списки имен тегов; новым символам будут приписаны только эти теги, независимо от состояния тегов по обе стороны от точки ввода. Если в аргументах команды присутствует несколько пар символы-списТегов, то результат ее выполнения совпадает с результатом выполнения нескольких таких же команд примитива, по одной на каждую пару. Последний аргумент списТегов может быть опущен. имяПути mark параметр ?арг арг ...? Эта команда предназначена для работы с метками. Поведение команды определяется значением аргумента параметр. В настоящее время поддерживаются следующие формы команды: имяПути mark gravity имяМетки ?направление? Если аргумент направление не задан, то команда возвращает значение left или right, указывающее, притягивается ли метка к символу слева или справа от нее. Если направление задано, то оно должно иметь значение left или right, и притяжению метки с именем имяМетки присваивается указанное значение. имяПути mark names Возвращает список, элементами которого являются имена всех уже установленных меток. имяПути mark next индекс Возвращает имя первой метки, идущей за символом с индексом индекс (или притягивающейся к этому символу). Если аргумент индекс задан в числовом виде, то поиск метки начинается с указанного символа. Если значением аргумента индекс является имя метки, то поиск очередной метки начинается непосредственно после заданной метки. При этом возвращаемым значением может оказаться имя метки с тем же самым положением, если в этом положении находится несколько меток. Смысл этого действия состоит в том, что команда mark next позволяет последовательно перебрать все метки в текстовом примитиве в том же порядке, в котором информация о метках выводится командой dump. Если метка установлена в положении, указанном специальным индексом end, то для операции mark next эта метка находится после индекса end. Если после символа с индексом индекс меток нет, то команда возвращает пустую строку. имяПути mark previous индекс Возвращает имя первой метки, идущей перед символом с индексом индекс (или притягивающейся к этому символу). Если аргумент индекс задан в числовом виде, то поиск метки начинается с символа, непосредственно предшествующего указанному. Если значением аргумента индекс является имя метки, то поиск очередной метки начинается непосредственно перед заданной меткой. При этом возвращаемым значением может оказаться имя метки с тем же самым положением, если в этом положении находится несколько меток. Смысл этого действия состоит в том, что команда mark previous позволяет последовательно перебрать все метки в текстовом примитиве в порядке, обратном тому, в котором информация о метках выводится командой dump. Если перед символом с индексом индекс меток нет, то команда возвращает пустую строку. имяПути mark set имяМетки индекс Устанавливает метку с именем имяМетки непосредственно перед символом с индексом индекс. Если метка с именем имяМетки уже существует, то она перемещается из своего старого положения в новое; если такой метки нет, то создается новая метка. Команда возвращает пустую строку. имяПути mark unset имяМетки ? имяМетки имяМетки...?

    Удаляет все метки с именами имяМетки. Удаленные метки нельзя использовать в качестве индексов; команда ⌠имяПути mark names⌠ так же не возвращает их в списке меток. Команда возвращает пустую строку.

    имяПути scan параметр арг

    Команда используется для сканирования текстов. Она может иметь один из двух видов в зависимости от значения параметра: имяПути scan mark x y Записывает координаты x и y и текущий вид текстового окна для последующего использования командами scan dragto. Обычно эта команда связана с нажатием клавиши ⌠Мыши■ в примитиве. Возвращает пустую строку. имяПути scan dragto x y Команда вычисляет разность значений аргументов x и y и значений аргументов x и y последней выполненной на примитиве команды scan mark. Затем команда переносит сохраненный вид окна на расстояние, в 10 раз пресыщающее вычисленную разность. Обычно эта команда связывается с событиями движения курсора ⌠Мыши■ в примитиве и предназначена для перетаскивания текста по окну с высокой скоростью. Возвращает пустую строку. имяПути search ?переключатели? образец индекс ?индексСтоп? Ищет в примитиве с именем имяПути текст, подходящий под образец, начиная с символа с индексом индекс. Если подходящая последовательность символов найдена, то команда возвращает в качестве результата индекс первого символа в этой последовательности; в противном случае возвращает пустую строку. Для управления поиском можно задать один или несколько из описываемых ниже переключателей (или их аббревиатур):

    -forwards

    Поиск осуществляется в направлении ⌠вперед■, подходящая последовательность символов ищется в положении, указанном аргументом индекс, и дальше по тексту. Это значение принято по умолчанию. -backwards Поиск осуществляется в направлении ⌠назад■, подходящая последовательность символов ищется перед положением, указанным аргументом индекс, и ближе всего к нему. -exact Требует точного соответствия образцу: символы в подходящей последовательности должны в точности совпадать с символами образца. Это значение принято по умолчанию. -regexp Указывает на необходимость считать образец регулярным выражением и устанавливать соответствие согласно правилам, принятым для регулярных выражений (подробности см. в описании команды regexp). -nocase Игнорировать различие регистров в образце и тексте.
    -count имяПерем Аргумент имяПерем представляет собой имя переменной; если подходящая последовательность найдена, то в эту переменную заносится число символов в ней. -- Единственная задача этого переключателя ≈ завершение списка переключателей; следующий за ним аргумент будет интерпретирован как образец, даже если он и начинается с -. Вся подходящая последовательность должна содержаться в одной строке текста. Перед сопоставлении с регулярным выражением из текста удаляются все символы перевода строки. Для поиска соответствия такому символу можно воспользоваться служебным символом ⌠$■ в регулярных выражениях. Для точных соответствий переводы строк сохраняются. Если задан аргумент индексСтоп, то поиск прекращается по достижении символа с этим индексом: для поиска вперед не будут рассматриваться соответствия, начинающиеся на символе с этим индексом или позднее, для поиска назад не рассматриваются соответствия, начинающиеся раньше указанного индекса. Если аргумент индексСтоп опущен, то поиск осуществляется по всему тексту: по достижении одного из краев текста поиск продолжается, начиная с другого края, до тех пор пока не будет снова достигнуто исходное положение. Если аргумент индексСтоп задан, то перескакивания на противоположный край текста не происходит.

    имяПути see индекс

    Сдвигает содержимое окна таким образом, чтобы символ с индексом индекс был виден полностью. Если этот символ расположен недалеко от видимой части текста, то сдвиг осуществляется настолько, чтобы он был виден у края окна. Если же указанный символ располагается далеко, то в результате сдвига он оказывается в центре окна. имяПути tag параметр ?арг арг ...? Эта команда используется для работы с тегами. Ее поведение определяется значением аргумента параметр. В настоящее время поддерживаются следующие формы команды: имяПути tag addимяТега индекс1 ?индекс2 индекс1 индекс2 ...? Приписывает тег имяТега ко всем символам, начиная с индекса1 и кончая непосредственно перед символа с индексом индекс2 (к самому этому символу данный тег не приписывается). В одной команде может присутствовать произвольное число пар индекс1-индекс2. Если последний аргумент индекс2 опущен, то тег приписывается к единственному символу с индексом индекс1. Если в указанном промежутке нет символов (например, индекс1 указывает за конец файла или индекс2 оказывается не больше индекса1), то команда не совершает никаких действий. имяПути tag bind имяТега ?послед? ?скрипт? Эта команда приписывает скрипт к тегу с именем имяТега. При наступлении последовательности событий, заданной аргументом послед, на символе, к которому приписан тег с именем имяТега, выполняется указанный скрипт. Эта команда примитива похожа на команду bind; единственное ее отличие состоит в том, что она действует на символах, а не на всем примитиве. Полное описание синтаксиса последовательности и подстановок, производимых в скрипте перед его выполнением, см. в п. 1.3. Если указаны все аргументы, то создается новая привязка, заменяющая все предыдущие привязки данной последовательности к тегу имяТега (если первым символом аргумента скрипт является ⌠+■, то скрипт присоединяется к текущей привязке, а не замещает ее). В этом случае команда возвращает пустую строку. Если аргумент скрипт опущен, то команда возвращает скрипт, привязанный к тегу имяТега (при отсутствии такого скрипта возникает ошибка). Если опущены и аргумент скрипт, и аргумент послед, то команда возвращает список всех последовательностей, привязки к которым определены для тега с именем имяТега. Привязки можно определять только для событий, связанных с ⌠Мышью■ и клавиатурой (например, Enter, Leave, ButtonPress, Motion и KeyPress), или для виртуальных событий. Привязки событий для текстового примитива используют текущую метку (см.Метки). Событие Enter наступает для тега при первом появлении этого тега на текущем символе, а событие Leave наступает, когда текущий символ оказывается несвязанным с данным тегом. События Enter и Leave могут наступить либо в результате перемещения текущей метки, либо как следствие изменения символа в позиции текущей метки. Обратите внимание на то, что эти события отличаются от событий Enter и Leave для окон. События, связанные с ⌠Мышью■ и клавиатурой, направлены на текущий символ. Если в привязке используется виртуальное событие, то оно может наступить только в случае если для его определения был использован выход с подчеркиванием, связанный с ⌠Мышью■ или клавиатурой.

    К текущему символу может быть приписано много тегов, причем каждый из этих тегов может иметь привязку для одной и той же последовательности событий. В таком случае исполняется по одной привязке к каждому из тегов в порядке от наименьшего приоритета к наибольшему. Если к одному тегу подходят несколько образцов привязок, то выбирается самая конкретная из них (подробности приведены в п. 1.3). Команды continue и break в скрипте привязки обрабатываются так же, как и в случае привязок, созданных командой bind.

    Если есть привязки и к примитиву в целом (созданные с помощью команды bind), то они служат дополнением привязок к тегам. Сначала выполняются привязки к тегам, а затем привязки ко всему примитиву.

    имяПути tag cget имяТега параметр

    Команда возвращает текущее значение параметра с именем параметр, ассоциированного с тегом имяТега. Параметр может иметь любое значение, воспринимаемое командой примитива tag configure. имяПути tag configure имяТега ?параметр? ?значение? ?параметр значение ...? Эта команда похожа на команду примитива configure; ее отличие состоит в том, что она модифицирует параметры, связанные с тегом имяТега, а не со всем текстовым примитивом. Если аргумент параметр не задан, то команда возвращает список значений всех параметров тега имяТега (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его значение нет, то возвращается часть списка, относящаяся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то команда присваивает указанным параметрам тега имяТега новые значения; в этом случае она возвращает пустую строку. Подробно параметры тегов описаны выше (см. Теги). имяПути tag delete имяТега ? имяТега...? Стирает всю информацию о тегах для каждого из аргументов имяТега. Команда снимает теги с символов и удаляет всю остальную информацию о них ≈ например, привязки и характеристики вывода на экран. Возвращает пустую строку. имяПути tag lower имяТега?нижеЭтого? Изменяет приоритет тега с именем имяТега, устанавливая его непосредственно перед тегом с именем нижеЭтого. Если аргумент нижеЭтого опущен, то тег имяТега получается самый нижний приоритет среди всех тегов. имяПути tag names?индекс? Возвращает список имен всех тегов, активных в позиции, указанной аргументом индекс. Если аргумент индекс опущен, то команда возвращает список всех существующих тегов в тексте (это все теги, установленные командой примитива ⌠имяПути tag⌠ и не удаленные командой примитива ⌠имяПути tag delete⌠, в том числе и те из них, которые в текущий момент не относятся ни к какому символу). Выводимый список отсортирован в порядке приоритетов тегов (от тега с наименьшим приоритетом к тегу с наибольшим). имяПути tag nextrange имяТега индекс1 ?индекс2? Команда ищет последовательность символов, помеченных тегом имяТега, первый символ которой стоит после символа с индексом индекс1, а последний символ предшествует символу с индексом индекс2. В случае, если таких последовательностей несколько, выбирается первая из них. Команда возвращает список из двух элементов, первый из которых ≈ индекс первого символа последовательности: а второй ≈ индекс символа, непосредственно следующего за последним символом последовательности. Если подходящей последовательности нет, то команда возвращает пустую строку. Если аргумент индекс2 не задан, то его значением по умолчанию считается конец текста. имяПути tag prevrange имяТега индекс1 ?индекс2? Команда ищет последовательность символов, помеченных тегом имяТега, первый символ которой стоит перед символом с индексом индекс1, но не раньше, чем символ с индексом индекс2 (символ с этим индексом допускается). В случае, если таких последовательностей несколько, выбирается ближайшая к символу с индексом индекс1. Команда возвращает список из двух элементов, первый из которых ≈ индекс первого символа последовательности: а второй ≈ индекс символа, непосредственно следующего за последним символом последовательности. Если подходящей последовательности нет, то команда возвращает пустую строку. Если аргумент индекс2 не задан, то его значением по умолчанию считается начало текста. имяПути tag raise имяТега?вышеЭтого? Изменяет приоритет тега с именем имяТега, устанавливая его непосредственно после тега с именем вышеЭтого. Если аргумент вышеЭтого опущен, то тег имяТега получается самый большой приоритет среди всех тегов. имяПути tag ranges имяТега Возвращает список всех участков текста, помеченных тегом с именем имяТега. Первые два элемента списка описывают первый участок, следующие два ≈ второй и т.д. Первый элемент каждой пары представляет собой индекс первого символа на соответствующем участке, второй элемент пары ≈ индекс символа, непосредственно следующего за последним символом участка. Если тегом имяТега не помечен ни один символ, то команда возвращает пустую строку. имяПути tag remove имяТега индекс1 ?индекс2 индекс1 индекс2 ...? Снимает пометку тегом имяТега со всех символов в промежутках, указанных индексами индекс1 и индекс2 (на символ с индексом индекс2 команда не действует). Если в указанном промежутке нет символов (например, если индекс1 указывает за конец текста или индекс2 оказывается не меньше индекса1), то команда не совершает никаких действий. Возвращает пустую строку. имяПути window параметр ?арг арг ...? Команда используется для работы со вставленными окнами. Поведение команды зависит от значения аргумента параметр. В настоящее время поддерживаются следующие формы команды: имяПути window cget индекс параметр Возвращает значение параметра конфигурации вставленного окна. Окно задается аргументом индекс, а аргумент параметр указывает имя конкретного параметра конфигурации; это имя должно бвть одним из тех, которые описаны во фрагменте ⌠Вставленные окна■. имяПути window configure индекс ?параметр значение ...? Запрашивает или модифицирует значения параметров конфигурации вставленного окна. Если параметр не указан, то возвращает список, содержащий значения всех допустимых параметров вставленного окна (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам присваиваются новые значения, а команда возвращает пустую строку. Список возможных параметров приведен в фрагменте ⌠Вставленные окна■. имяПути window create индекс ?параметр значение ...? Команда создает ссылку на новое окно, положение которого в тексте определяется аргументом индекс. Конфигурация окна задается произвольным числом пар параметр-значение. Список возможных параметров см. в ⌠ВСТАВЛЕННЫЕ ОКНА■. Команда возвращает пустую строку. имяПути window names Возвращает список имен всех вставленных в настоящий момент в окно окон. имяПути xview параметр арг Команда используется для запроса горизонтального положения текста в окне примитива и изменения этого положения. Она может принимать одну из следующих форм: имяПути xview Возвращает список из двух элементов, каждый из которых представляет собой вещественное число в промежутке между ▒0▓ и ⌠1■. В совокупности эти два числа описывают, какая часть документа по горизонтали видна в окне. Если, например, значение первого числа равно ⌠.2■, а второго ⌠.6■, то слева от экрана не видно 20% текста, 40% видимы на экране и еще 40% не видимы справа от экрана. Числа относятся только к строчкам, которые действительно попадают на экран. Если все строчки в окне короткие и полностью умещаются на экране, то команда возвращает значения ▒0▓ и `1▓, даже если в тексте фактически присутствуют строчки, длина которых намного превышает ширину окна. Те же самые значения передаются полосам прокрутки через параметр -xscrollcommand. имяПути xview moveto число Сдвигает содержимое окна таким образом, чтобы часть текста по горизонтали, описываемая аргументом число, находилась слева от экрана. Число должно быть вещественным числом в промежутке между ▒0▓ и `1'. имяПути xview scroll число что Команда сдвигает содержимое окна влево или вправо в соответствии со значениями аргументов число и что. Число должно быть целым. Аргумент что может принимать значения units и pages, а также их аббревиатуры. Если аргумент что имеет значение units, то сдвиг происходит на числосимволов средней ширины; в случае значения pages сдвиг выполняется на число страниц (размер страницы равен размеру экрана). Если число отрицательно, то сдвиг происходит вправо, в противном случае ≈ влево. имяПути yview параметр арг Команда используется для запроса вертикального положения текста в окне примитива и изменения этого положения. Она может принимать одну из следующих форм: имяПути yview Возвращает список из двух элементов, каждый из которых представляет собой вещественное число в промежутке между ▒0▓ и `1▓. Первый элемент списка указывает положение в тексте первого символа верхней строчки на экране (например, значение ⌠0.5■ означает, что этот символ находится в середине текста). Второй элемент списка указывает положение символа, следующего непосредственно за последним символом нижней строчки экрана. Те же самые значения передаются полосам прокрутки через параметр -yscrollcommand. имяПути yview moveto число Сдвигает содержимое окна таким образом, чтобы символ, положение которого задано аргументом число, оказался в верхней строчке экрана. Число должно быть вещественным числом в промежутке между ▒0▓ и `1▓; значение ▒0▓ указывает на первый символ в тексте, значение `0.33▓ ≈ на символ, отстоящий от начала текста на `1/3▓ и т.д. имяПути yview scroll число что Команда сдвигает содержимое окна вверх или вниз в соответствии со значениями аргументов число и что. Число должно быть целым. Аргумент что может принимать значения units и pages, а также их аббревиатуры. Если аргумент что имеет значение units, то сдвиг происходит на число строчек; в случае значения pages сдвиг выполняется на число страниц (размер страницы равен размеру экрана). Если число отрицательно, то сдвиг происходит вверх, в противном случае ≈ вниз. имяПути yview ?-pickplace? индекс Сдвигает содержимое окна примитива таким образом, чтобы сделать видимым символ с индексом индекс. Если аргумент -pickplace не задан, то символ с указанным индексом появляется в верхней строчке экрана. Если же этот аргумент задан, то примитив определяет место появления символа на экране по следующему правилу: Если символ с индексом индекс уже виден на экране, то ничего не изменяется.

    Если этот символ находится лишь незначительно выше экрана, то он оказывается в верхней строчке экрана.

    Если этот символ находится лишь незначительно ниже экрана, то он оказывается в нижней строчке экрана.

    В остальных случаях указанный символ оказывается в центре экрана.

    Параметр -pickplace устарел после введения команды примитива see, которая управляет движениями как в горизонтальном, так и в вертикальном направлении, в то время, как -pickplace влияет только на движение по вертикали.

    имяПути yview число

    Команда сдвигает содержимое в окне таким образом, чтобы первый символ строки с номером, следующим за номером число, оказался в верхней строчке экрана. Аргумент число должен быть целым. Команда использовалась для прокрутки, но теперь она устарела.
    ПРИВЯЗКИ Tk автоматически создает привязки класса, которые определяют следующее поведение текстовых примитивов по умолчанию. В приводимом ниже описании ⌠слово■ ≈ это непрерывная последовательность символов, состоящая из букв, цифр и символов подчеркивания ⌠_■, либо из любого другого одиночного символа.

    Щелчок клавишей 1 ⌠Мыши■ устанавливает курсор ввода непосредственно перед символом, на котором расположен курсор ⌠Мыши■.

    Движение ⌠Мыши■ с нажатой клавишей 1 растягивает выделение от курсора ввода то символа под курсором ⌠Мыши■.

    Двойной щелчок по клавише 1 ⌠Мыши■ выделяет слово, на котором находится курсор ⌠Мыши■, и устанавливает курсор ввода на начало этого слова. Если тащить ⌠Мышь■ после двойного щелчка, то выделение растягивается на полные слова.

    Тройной щелчок по клавише 1 ⌠Мыши■ выделяет строку, на которой находится курсор ⌠Мыши■, и устанавливает курсор ввода на начало этой строки. Если тащить ⌠Мышь■ после тройного щелчка, то выделение растягивается на полные строки.

    Край выделения можно переместить, таща ⌠Мышь■ с нажатой клавишей 1 при нажатой клавише Shift: при этом движется край выделения, ближайший к курсору ⌠Мыши■ в момент нажатия клавиши 1. Если перед началом движения по клавише ⌠Мыши■ был сделан двойной щелчок, то выделение будет растягиваться на полные слова; если тройной щелчок ≈ то на полные строки.

    Щелчок по клавише 1 ⌠Мыши■ при нажатой клавише Control перемещает курсор ввода, не изменяя выделения.

    При нажатии на клавиши обычных символов эти символы вводятся на месте курсора ввода.

    Содержимое окна примитива можно сдвинуть с помощью движения ⌠Мыши■ при нажатой клавише 2. Если щелкнуть по клавише 2 ⌠Мыши■, не перемещая ⌠Мышь■, то выделение в тексте копируется в место курсора ⌠Мыши■. Нажатие на клавишу Insert также приводит к копированию выделения, но в место курсора ввода, а не курсора ⌠Мыши■.

    При движении ⌠Мыши■ вне экрана с нажатой клавишей 1 содержимое примитива автоматически прокручивается и на экране появляется дополнительная порция текста (если вне экрана в направлении движения ⌠Мыши■ есть еще текст).

    Нажатие на клавиши Left или Right приводит к сдвигу курсора ввода на один символ влево или вправо соответственно; при этом всякое выделение в тексте отменяется. Нажатие на клавиши Left или Right при нажатой клавише Shift приводит к сдвигу курсора ввода и расширению выделения на один символ.

    Нажатие на клавиши Control-Left или Control-Right сдвигает курсор ввода на целое слово, а нажатие на клавиши Control-Shift-Left или Control-Shift-Right приводит к сдвигу курсора ввода и расширению выделения на одно слово.

    Нажатие на клавиши Control-b и Control-f приводит к такому же результату, что и нажатие на Left и Right соответственно. Комбинации клавиш Meta-b и Meta-f дают тот же эффект, что и Control-Left и Control-Right соответственно.

    Нажатие на клавиши Up и Down переводит курсор ввода на одну строчку вверх или вниз, отменяя при этом любое выделение в тексте. Нажатие на клавиши Up и Down при нажатой клавише Shift приводит к сдвигу курсора ввода и растягиванию выделения до нового положения курсора. Комбинации Control-Up и Control-Down сдвигают курсор ввода на один абзац (группу строчек, отделенную от соседней группы пустой строчкой), а комбинации Control-Shift-Up и Control-Shift-Down приводят к тому же к растягиванию выделения до нового положения курсора ввода. Комбинации Control-p и Control-n дают тот же результат, что и Up и Down соответственно.

    Клавиши Next и Prior сдвигают курсор ввода вперед или назад на одну страницу; при этом выделения в тексте отменяются. Нажатие на клавиши Next и Prior при нажатой клавише Shift приводит к сдвигу курсора ввода и растягиванию выделения до нового положения курсора. Control-v сдвигает видимую часть текста на одну страницу вперед, причем курсор ввода не меняет своего положения и выделение также остается неизменным.

    Комбинации Control-Next и Control-Prior сдвигают видимую часть текста на одну страницу вправо или влево, причем курсор ввода не меняет своего положения, и выделение также остается неизменным.

    Нажатие на клавиши Home и Control-a помещает курсор ввода в начало текущей строчки, причем все выделения в примитиве отменяются. Shift-Home помещает курсор ввода в начало текущей строчки и растягивает выделение до нового положения курсора. Нажатие на клавиши End и Control-e помещает курсор ввода в конец текущей строчки, причем все выделения в примитиве отменяются. Shift-End помещает курсор ввода в конец текущей строчки и растягивает выделение до нового положения курсора.

    Комбинации Control-Home и Meta-< устанавливают курсор ввода в начало текста, причем все выделения в примитиве отменяются. Control-Shift-Home устанавливает курсор ввода в начало текста и растягивает выделение до нового положения курсора.

    Комбинации Control-End и Meta-> устанавливают курсор ввода в конец текста, причем все выделения в примитиве отменяются. Control-Shift-End устанавливает курсор ввода в конец текста и растягивает выделение до нового положения курсора.

    Клавиша Select и комбинация Control-Space устанавливают опорную точку выделения в текущее положение курсора ввода. Текущее выделение при этом не изменяется. Комбинации Shift-Select и Control-Shift-Space растягивают выделение до текущего положения курсора ввода; если в тексте не было выделения, то выделяются символы между опорной точкой выделения и курсором ввода.

    Нажатие на клавиши Control-/ приводит к выделению всего содержимого примитива.

    Control-\ отменяет выделение в примитиве.

    Клавиша F16 (на многих станциях Sun обозначенная Copy) или Meta-w копируют выделение в примитиве (если оно есть) в буфер обмена.

    Клавиша F20 (на многих станциях Sun обозначенная Cut) или Control-w копируют выделение в примитиве в буфер обмена и удаляют выделение. Если выделения нет, то нажатие на эти клавиши не приводит ни к каким действиям.

    Клавиша F18 (на многих станциях Sun обозначенная Paste) или Control-y вставляет содержимое буфера обмена в положении курсора ввода.

    Нажатие на клавишу Delete приводит к удалению выделения (если оно есть в примитиве). Если выделения нет, то нажатие на эту клавишу приводит к удалению символа справа от курсора ввода.

    Backspace и Control-h удаляют выделение (если оно есть в примитиве). Если выделения нет, то нажатие на эти клавиши приводит к удалению символа слева от курсора ввода.

    Control-d удаляет символ справа от курсора ввода.

    Meta-d удаляет слово справа от курсора ввода.

    Нажатие на клавиши Control-k приводит к удалению символов справа от курсора ввода до конца строки. Если курсор ввода находится в конце строки, то удаляется символ перевода строки.

    Control-o открывает новую строку, вставляя символ перевода строки перед курсором ввода; положение курсора ввода при этом не изменяется.

    Meta-backspace и Meta-Delete удаляют слово слева от курсора ввода.

    Control-x удаляет выделение в текстовом примитиве.

    Control-t меняет местами два символа справа от курсора ввода.

    Если примитив сделан недоступным с помощью параметра -state, то текст можно двигать по экрану и выделять, однако курсор ввода не будет отображаться в примитиве и никакие модификации текста невозможны.

    Определяя новые привязки к отдельным примитивам или переопределяя привязки класса, поведение текстовых примитивов можно изменить.
     

    ВОПРОСЫ ПРОИЗВОДИТЕЛЬНОСТИ  
    Текстовые примитивы должны обрабатываться эффективно при самых разнообразных условиях. В них используется 2-3 байта основной памяти на каждый символ текста, поэтому текст длиной 1 Мегабайт и более вполне может эффективно обрабатываться на большинстве рабочих станций. Внутреннее представление текста имеет вид модифицированного B-дерева, поэтому обработка даже длинных текстов довольно эффективна. Реализация меток также позволяет использовать много меток. В большинстве случаев удобно пользоваться большим числом уникальных тегов или тегом, приписанным к большому числу различных частей текста.

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

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

    При каждом мигании курсора ввода строчка экрана, на которой он находится, перерисовывается целиком, что приводит к постоянному потоку графической информации. Для устранения этого эффекта установите атрибут insertOffTime в ⌠0■.
     


    tk
    Управляет внутренним состоянием Tk СИНТАКСИС  
    tk параметр ?арг арг ...?
    ОПИСАНИЕ  
    Команда tk обеспечивает доступ к различным элементам внутреннего состояния Tk. Большая часть информации, с которой работает команда, относится к приложению в целом или к экрану или дисплею, а не к конкретному окну. Команда может принимать одну из нескольких форм в зависимости от значения аргумента параметр. Допустимы следующие формы:

    tk appname ?новИмя?

    Если аргумент новИмя не задан, то команда возвращает имя приложения (которое можно использовать в команде send для взаимодействия с приложениями). Если аргумент новИмя задан, то имя приложения заменяется на новИмя. Если приложение с заданным именем уже существует, то для того, чтобы имя было уникальным, к нему добавляется суффикс вида "#2" или "#3". Результатом выполнения команды является фактически присвоенное имя; новИмя не должно начинаться с прописной буквы. В противном случае может возникнуть коллизия с обработкой параметров, так как имена, начинающиеся с прописной буквы, интерпретируются как имена классов; в результате может случиться так, что Tk не найдет некоторые параметры приложения. Если блокировать пересылку путем удаления команды send, то эта команда отменит блокировку и воссоздаст команду send. tk scaling ?-displayof окно? ?число? Устанавливает коэффициент масштабирования, используемый Tk, при переводе физических единиц (например, точки, дюймы или миллиметры) в пиксели, и запрашивает текущее значение коэффициента. Аргумент число представляет собой число с плавающей точкой, которое задает число пикселей в точке на экране. Если аргумент окно опущен, то его значением по умолчанию является главное окно. Если опущен аргумент число, то команда возвращает текущее значение коэффициента масштабирования. ⌠Точка■ ≈ это единица измерения, равная 1/72 дюйма. Коэффициент масштабирования 1.0 соответствует одному пикселу на точку ≈ стандартному 72 dpi (точек на дюйм) монитору. Коэффициент масштабирования 1.25 соответствует 1.25 пикселю на точку, т.е. стандартному значению для монитора 90 dpi; установка коэффициента 1.25 для 72 dpi монитора увеличивает изображение всех элементов приложения в 1.25 раз по сравнению с нормальным. Исходное значение коэффициента устанавливается при запуске приложения на основании характеристик монитора, однако его можно изменить в любой момент. Все измерения, выполняемые после установки коэффициента, будут использовать его новое значение, однако будут ли существующие примитивы динамически меняться, подстраиваясь под новое значение коэффициента, предсказать нельзя.

    tk_menuBar, tk_bindForTraversal
    Устаревшие команды для управления меню. СИНТАКСИС  
    tk_menuBar frame ?menu menu ┘?

    tk_bindForTraversal arg arg
     

    ОПИСАНИЕ  
    Команды использовались в Tk версии 3.6, и более ранних, для управления ниспадающими меню взаимодействия с ними при помощи клавиатуры. В настоящий момент команды остаются только для обеспечения совместимости с ранними версиями, и их не следует использовать в новых разработках.
    tk_bisque, tk_setPalette
    Модифицирует цветовую палитру Tk. СИНТАКСИС  
    tk_setPalette фон

    tk_setPalette имя значение ? имя значение...?

    tk_bisque
     

    ОПИСАНИЕ  
    Процедура tk_setPalette изменяет цветовую схему Tk. Это происходит за счет изменения цветов в существующих примитивах и внесения изменений в базу данных параметров, в результате чего будущие примитивы будут пользоваться новой цветовой схемой. При выполнении команды tk_setPalette с единственным аргументом, этим аргументом является имя цвета, который становится нормальным цветом фона; процедура tk_setPalette вычисляет всю палитру цветов на основе этого цвета фона. Если же аргументы команды tk_setPalette включают несколько пар имя-значение, то имя ≈ это имя параметра, а второй элемент пары представляет собой новое значение параметра. В настоящее время поддерживаются следующие имена параметров в базе данных:
     
    activeBackground foreground selectColor
    activeForeground  highlightBackground  selectBackground
    background highlightColor selectForeground
    disabledForeground insertBackground troughColor
       
    Процедура tk_setPalette пытается вычислить разумные значения по умолчанию для любого незаданного параметра. Можно указать и параметры, отличные от приведенных выше, и Tk изменит значения и этих параметров. Такая возможность полезна при использовании специальных примитивов с дополнительными цветовыми параметрами.

    После того, как новое значение каждого из цветовых параметров вычислено, tk_setPalette просматривает иерархию примитивов, чтобы изменить значения параметров всех существующих примитивов. Для каждого примитива она проверяет, определен ли для него какой-либо из заданных параметров. Если это так и если текущее значение параметра совпадает со значением по умолчанию, то это значение заменяется новым; если же текущее значение отлично от значения по умолчанию, то tk_setPalette не изменяет его. Значением параметра по умолчанию является то, которое порождено примитивом ([lindex [$w configure $option] 3]) или, если процедура tk_setPalette выполнялась и раньше, то значение, установленное ее предыдущим выполнением.

    После модификации всех примитивов в приложении tk_setPalette добавляет параметры в базу данных параметров, изменяя значения по умолчанию для будущих примитивов. Новые параметры добавляются с приоритетом widgetDefault, поэтому они будут подавлены параметрами из файла .Xdefaults или параметрами, заданными в командной строке, создающей примитив.

    Процедура tk_bisque обеспечивает совместимость с предыдущими версиями: она задает схему "bisque" на основе светло-коричневого (бисквитного) цвета, которая использовалась в Tk 3.6 и более ранних версиях.
     
     


    tk_chooseColor
    Открывает диалоговое окно для выбора цвета пользователем. СИНТАКСИС  
    tk_chooseColor ?параметрзначение...?
    ОПИСАНИЕ  
    Процедура tk_chooseColor открывает диалоговое окно для выбора цвета пользователем. В строке аргументов допустимы следующие пары параметр-значение:

    -initialcolor цвет

    Задает начальный цвет, выводимый в окне диалога при его открытии. Параметр цвет может иметь любое значение, приемлемое для функции Tk_GetColor. -parent окно Делает окно логическим родителем окна диалога. Окно диалога выводится поверх своего родительского окна. -title строкаЗаголовка Задает строку, которую нужно вывести в качестве заголовка окна диалога. Если этот параметр не задан, то будет выведен заголовок по умолчанию. При выборе пользователем цвета tk_chooseColor возвращает имя цвета в виде, приемлемом для Tk_GetColor. Если пользователь прерывает операцию, то обе команды возвращают пустую строку.

    ПРИМЕР

    button .b -fg [tk_chooseColor -initialcolor gray -title "Choose color"]
     
     
     
     

    tk_dialog
    Создает окно модального диалога и ожидает ответа. СИНТАКСИС  
    tk_dialog окно заголовок текст двуцвет умолч строка строка ...
    ОПИСАНИЕ  
    Эта процедура является частью библиотеки скриптов Tk. Ее аргументы описывают диалоговое окно:

    окно

    Имя окна верхнего уровня, которое следует использовать для диалога. Любое существующее под этим именем окно уничтожается. заголовок Текст, предназначенный для вывода в строке заголовка менеджера окон. текст Сообщение, которое должно появиться в верхней части диалогового окна. двуцвет Если значение этого параметра непусто, то оно задает двуцветное изображение для вывода в верхней части диалогового окна слева от текста. Если значением является пустая строка, то никакого двуцветного изображения не выводится. умолч Если значение этого параметра является неотрицательным целым числом, то оно представляет собой номер кнопки, которая должна быть кнопкой по умолчанию (▒0▓ для самой левой кнопки и т.д.) Если значение параметра отрицательно или представляет собой пустую строку, то кнопки по умолчанию не будет. строка Каждому из аргументов строка ставится в соответствие одна кнопка. Каждая строка задает текст, который должен быть выведен в соответствующей кнопке слева направо. После создания диалогового окна процедура tk_dialog ожидает, пока пользователь выберет одну из кнопок либо щелкнув по ней ⌠Мышью■, либо нажав на клавишу Return, чтобы выбрать значение по умолчанию (если такое есть). Затем процедура возвращает номер выбранной кнопки: `0▓ для самой левой кнопки, `1▓ для соседней с ней и т.д. Если окно диалога уничтожено до того, как пользователь выбрал одну из кнопок, то процедура возвращает `-1▓.

    В ожидании ответа пользователя tk_dialog производит локальный захват. В результате пользователь может взаимодействовать только с окном диалога.
     
     
     
     

    tk_focusFollowsMouse, tk_focusNext, tk_focusPrev
    Утилиты служат для управления фокусом ввода. СИНТАКСИС  
    tk_focusNext window

    tk_focusPrev window

    tk_focusFollowsMouse
     

    ОПИСАНИЕ  
    Процедура tk_focusNext возвращает имя следующего после window окна в очередности фокусов, который определяется очередью стека окон и структурой иерархии окон.

    Процедура tk_focusPrev противоположна по действию процедуре tk_focusNext: она возвращает имя предыдущего окна.

    Утилита tk_focusFollowsMouse переводит фокус в то окно, над которым в данный момент находится курсор ⌠Мыши■.
     
     
     
     
     
     
     

    tk_getOpenFile, tk_getSaveFile
    Открывает окно диалога, в котором пользователь должен выбрать файл для того, чтобы открыть или сохранить его. СИНТАКСИС  
    tk_getOpenFile ?параметрзначение...?

    tk_getSaveFile ? параметрзначение...?
     

    ОПИСАНИЕ  
    Процедуры tk_getOpenFile и tk_getSaveFile открывают окно диалога, в котором пользователь должен выбрать файл для того, чтобы открыть или сохранить его. Команда tk_getOpenFile обычно выполняется при вызове команды Open из меню File. Она позволяет лишь выбрать один из существующих файлов. Если пользователь вводит имя несуществующего файла, то окно диалога информирует его об ошибке и предлагает сделать другой выбор. Если приложение позволяет пользователю создавать файлы, то для этой цели должна быть предназначена специальная команда меню New.

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

    В качестве пар аргумент-значение в командной строке этих двух команд допускаются следующие варианты:

    -defaultextension расширение

    Задает строку, которая автоматически приписывается к имени файла в случае, если имя, введенное пользователем, не имеет расширения. По умолчанию значение этого параметра ≈ пустая строка, т.е. имя файла не будет получать расширения ни в каком случае. На платформе Макинтош, где имена файлов не требуют расширения, этот параметр игнорируется. -filetypes списокТиповФайлов Если в файловом диалоге на конкретной плаформе имеется окно списка типов файлов, то этот параметр задает содержимое списка. При выборе типа файла в списке выводятся только файлы этого типа. Если параметр не задан или его значение ≈ пустая строка, а также если на данной платформе не поддерживается окно списка типов файлов, то выводятся имена всех файлов, несмотря на их типы. Содержимое списка обсуждается ниже (см. ⌠ОПИСАНИЕ ОБРАЗЦОВ ТИПОВ ФАЙЛОВ■). -initialdir каталог Указывает, файлы какого каталога должны выводиться при появлении окна диалога. Если этот параметр не задан, то выводится список имен файлов в текущем каталоге процесса. На платформе Макинтош параметр каталог срабатывает не всегда. Это не результат ошибки. Этот эффект является следствием того, что панель управления General Controls на Макинтоше позволяет конечному пользователю подавить значение каталога приложения по умолчанию. -initialfile имяфайла Задает имя файла, которое должно выводиться в окне диалога при его появлении. Команда tk_getOpenFile игнорирует этот параметр. -parent окно Делает окно логическим родителем файлового диалога. Окно файлового диалога выводится поверх родительского окна. -title строкаЗаголовка Задает строку, которая выводится в качестве заголовка в окне диалога. Если параметр не задан, то в окне выводится заголовок по умолчанию. На платформе Макинтош параметр игнорируется. После того, как пользователь выбрал файл, обе команды tk_getOpenFile и tk_getSaveFile возвращают полное имя пути к этому файлу. Если пользователь прерывает выполнение операции, то обе команды возвращают пустую строку.
    ОПИСАНИЕ ОБРАЗЦОВ ТИПОВ ФАЙЛОВ  
    Значение списокТиповФайлов параметра -filetypes представляет собой список образцов типов файлов. Каждый из образцов ≈ это список вида

    имяТипа {расширение ? расширение...?} ?{макТип ? макТип...?}?

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

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

    На платформе Макинтош файл подходит под образец, если расширение его имени совпадает по крайней мере с одним из расширений И оно имеется по крайней мере в одном из значений параметра макТип в образце. Например, под образец исходных файлов на языке C подходят файлы с расширением .c И и с макТипом TEXT. Для того, чтобы заменить конъюнкцию И дизъюнкцией ИЛИ, нужно вместо одной строки образца завести две строки, в одной из которых есть только расширения, а в другой ≈ только макТипы. Под образец файлового типа GIF подходят файлы с расширением .gif ИЛИ имеющие макТип GIFF.

    На платформах Unix и Windows файл подходит под образец файлового типа, если расширение его имени соответствует одному из расширений в образце. макТипы игнорируются.
     

    ЗАДАНИЕ РАСШИРЕНИЙ  
    На платформах Unix и Macintosh соответствие образцам устанавливается обычным образом. На платформах Windows соответствие образцам устанавливается операционной системой. Возможными расширениями могут быть:
    1. специальное расширение *, под которое подходит любой файл;
    2. специальное расширение "", под которое подходит любой файл без расширения (т.е. файл, имя которого не содержит точки);
    3. произвольная строка символов, среди которых нет символов маски (* и ?).
    Ввиду того, что на различных платформах используются различные правила соответствия, появление символов маски в расширениях не допускается, за исключением специального расширения ▒*▓. Расширения, в которых нет точки (например, ▒~▓), допустимы, но они могут работать не на всех платформах.

    ПРИМЕР
     

    set types { {{Text Files} {.txt} } {{TCL Scripts} {.tcl} } {{C Source Files} {.c} TEXT}
    {{GIF Files} {.gif} }
    {{GIF Files} {} GIFF}
    {{All Files} * }
    }
    set filename [tk_getOpenFile -filetypes $types]
    if {$filename != ""} { # Открыть файл ... }
    tk_messageBox
    Выводит окно сообщения и ждет ответа пользователя. СИНТАКСИС  
    tk_messageBox ?параметрзначение...?
    ОПИСАНИЕ  
    Эта процедура создает и выводит на экран окно сообщения, в котором находится определяемое приложением сообщение, пиктограмма и набор кнопок. Каждая из кнопок в окне сообщения отождествляется с уникальным символическим именем (см. параметры -type). После появления окна сообщения команда tk_messageBox ожидает, пока пользователь не выберет одну из кнопок. После того, как выбор сделан, команда возвращает символическое имя выбранной кнопки. Команда поддерживает следующие пары параметр-значение:

    -default имя

    Параметр имя задает символическое имя кнопки по умолчанию для окна сообщения ('ok', 'cancel' и т.п.). Список возможных символических имен см. в описании параметра -type. Если в окне сообщения лишь одна кнопка, то она автоматически делается кнопкой по умолчанию; если же кнопок несколько, а параметр -default не задан, то кнопки по умолчанию не будет. -icon изобрПикт Задает выводимую пиктограмму. Параметр изобрПикт может иметь одно из следующих значений: error, info, question или warning. Если параметр не указан, то пиктограмма не выводится. -message строка
      Задает сообщение, выводимое в окне сообщений.


    -parent окно

    Делает окно логическим родителем окна сообщений. Окно сообщения выводится поверх своего родительского окна. -title строкаЗаголовка Задает текстовую строку, которая выводится в качестве заголовка в окне сообщения. Значением параметра по умолчанию является пустая строка. -type предопределенныйТип  
    Устанавливает предопределенный набор кнопок в окне. Параметр предопределенныйТип может иметь следующие значения:
    abortretryignore Выводит три кнопки с символическими именами abort, retry и ignore. ok
      Выводит одну кнопку с символическим именем ok.


    okcancel

    Выводит две кнопки с символическими именами ok и cancel. retrycancel Выводит две кнопки с символическими именами retry и cancel. yesno Выводит две кнопки с символическими именами yes и no. yesnocancel Выводит три кнопки с символическими именами yes, no и cancel.
    ПРИМЕР
      set answer [tk_messageBox -message "Really quit?" -type yesno -icon question]
    case $answer { yes exit
    no {tk_messageBox -message "I know you like this application!" -type ok}


    }

    tk_optionMenu
    Процедура создает меню-кнопку с защелкиванием (option menubutton) и ее меню. СИНТАКСИС tk_optionMenu w varName value ?value value ┘? ОПИСАНИЕ Команда создает меню-кнопку с защелкиванием по имени w и связанное с ней меню. Такое меню позволяет пользователю выбрать одно из значений, заданных аргументами value. Текущее выбранное значение присваивается глобальной переменной varName, а также отображается на кнопке в виде ярлыка.

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

    tk_popup
    Процедура открывает всплывающее меню. СИНТАКСИС tk_popup menu x y ?entry? ОПИСАНИЕ Процедура выводит на дисплей всплывающее меню при помощи примитива меню menu в позиции, заданной аргументами x и y. Необязательный аргумент entry указывает индекс некоторой команды (входа) меню menu, к которой будет относиться выводимое меню.
    tkerror
    Команда обрабатывает фоновые ошибки. СИНТАКСИС tkerror message ОПИСАНИЕ Данная команда обрабатывает фоновые ошибки и предназначена для обеспечения совместимости с ранними версиями Tk. В настоящей версии Tk ее функции исполняет команда bgerror. Поддержка команды tkerror может быть вскоре прекращена, поэтому рекомендуется в приложениях заменять эту команду на bgerror.
    tkvars
    Переменные, используемые или задаваемые Tk. ОПИСАНИЕ Нижеследующие переменные используются Tk в разные моменты работы, или задаются им.

    tk_library ≈ переменная содержит путь к каталогу с библиотекой скриптов Tcl, относящихся к Tk.

    tk_patchLevel ≈ переменная содержит десятичное число, соответствующее номеру версии поправок к Tk.

    TkPriv ≈ эта переменная есть массив значений внутренних данных Tk, используемых библиотечными процедурами Tk и привязками (bindings) по умолчанию. Внешние по отношению к Tk программы эти данные не используют.

    tk_strictMotif ≈ это флаг. Если приложение устанавливает его, то Tk будет стремиться наиболее полно поддерживать стиль графического интерфейса Motif.

    tk_version ≈ переменная содержит номер версии библиотеки Tk.
     
     

    tkwait

    Команда организует паузу до момента изменения значения переменной или закрытия окна.
    СИНТАКСИС tkwait variable name

    tkwait visibility name

    tkwait window name

    ОПИСАНИЕ Команда ожидает наступления одного из нескольких событий, после этого она завершает работу без выполнения каких-либо действий. Если первый аргумент команды есть variable, то name есть имя глобальной переменно, и команда ожидает изменения значения этой переменной. Если первый аргумент команды есть visibility, то name есть имя окна, и команда ожидает изменения его состояния внешних параметров (visibility). Если первый аргумент команды есть window, то name есть имя окна, и команда ожидает закрытия этого окна.
    toplevel
    Создание примитива верхнего уровня и управление им.
      Синтаксис
    Стандартные параметры
    Дополнительные параметры примитива
    Описание
    Команда примитива
    Привязки
    СИНТАКСИС toplevel имяПути параметры СТАНДАРТНЫЕ ПАРАМЕТРЫ
       
    -background -highlightbackground  -highlightthickness
    takefocus -cursor -highlightcolor
    -relief    
    Подробное описание этих параметров приведено в разделе options ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА Имя параметра: -background
    Имя в Базе: background
    Класс в Базе: Background
    Этот параметр по смыслу совпадает со стандартным параметром background за исключением того, что его значением может являться и пустая строка. В последнем случае при выводе примитива не появляется ни фона, ни бордюра, и для них не используется ни одна из красок его палитры.
      Имя параметра: -class
    Имя в Базе: class
    Класс в Базе: Class
    Задает класс окна. Этот класс используется при запросах базы данных параметров о значениях других параметров примитива; а также при определении привязок. Параметр -class нельзя переопределить командой примитива configure.
      Имя параметра: -colormap
    Имя в Базе: colormap
    Класс в Базе: Colormap
    Задает палитру, используемую в окне. Значением параметра может быть либо new (и в этом случае для данного окна и его потомков создается новая палитра), либо имя другого окна (которое должно находиться на том же экране и иметь то же значение параметра -visual, что и имяПути). Если параметр -colormap не задан, то новое окно использует палитру экрана по умолчанию. Параметр -colormap нельзя переопределить командой примитива configure.
      Имя параметра: -container
    Имя в Базе: container
    Класс в Базе: Container
    Значение параметра должно быть булевским. Если его значение истина, то окно будет использоваться в качестве контейнера, в который будет вставляться некоторое другое приложение (например, можно вставить примитив верхнего уровня Tk с помощью параметра -use). Окно будет поддерживать соответствующие протоколы управления окнами, например, для обработки геометрических запросов. Параметр -container нельзя переопределить командой примитива configure.
      Имя параметра: -height
    Имя в Базе: height
    Класс в Базе: Height
    Задает желаемую высоту окна в любом виде, приемлемом для Tk_GetPixels. Если введенное значение неположительно, то место для окна вообще не запрашивается.
      Имя параметра: -menu
    Имя в Базе: menu
    Класс в Базе: Menu
    Задает примитив меню, используемый в качестве полосы меню. На Macintosh полоса меню будет выведена вверху основного монитора. В Microsoft Windows и на всех платформах UNIX меню выводится поверх окна верхнего уровня как деталь оформления окна менеджером окон.
      Имя параметра: -screen
    Имя в Базе:
    Класс в Базе:
    Задает экран, на котором следует разместить новое окно. Может быть использовано произвольное допустимое имя экрана, в том числе и отличное от текущего. По умолчанию значением является имя текущего экрана. Параметр -screen является специальным и его нельзя переопределить командой примитива configure.
      Имя параметра: -use
    Имя в Базе: use
    Класс в Базе: Use
    Используется для вставки. Если значение параметра отлично от пустой строки, то оно должно быть идентификатором окна-контейнера, заданным в виде шестнадцатеричной строки, ≈ в том виде, в котором возвращает результат команда window id. Примитив верхнего уровня будет создаваться как непосредственный потомок указанного контейнера, а не корневого окна экрана. Если окно-контейнер содержится в приложении Tk, то оно должно быть либо рамкой, либо примитивом верхнего уровня, для которого задан параметр -container. Параметр -use нельзя переопределить командой примитива configure.
      Имя параметра: -visual
    Имя в Базе: visual
    Класс в Базе: Visual
    Задает внешний вид окна в любом виде, приемлемом для Tk_GetVisual. Если параметр не задан, то используется его значение по умолчанию для экрана. Параметр -visual нельзя переопределить командой примитива configure.
      Имя параметра: -width
    Имя в Базе: width
    Класс в Базе: Width
    Задает желаемую ширину окна в любом виде, приемлемом для Tk_GetPixels. Если введенное значение неположительно, то место для окна вообще не запрашивается.
    ОПИСАНИЕ Команда toplevel создает новый примитив верхнего уровня (задаваемый аргументом имяПути). Детали изображения примитива верхнего уровня, такие как цвет его фона и объемный вид, задаются с помощью описанных выше дополнительных параметров. Команда toplevel возвращает аргумент имяПути.

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

    КОМАНДА ПРИМИТИВА Команда toplevel создает новую команду Tcl, имя которой совпадает с именем окна примитива верхнего уровня. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

    имяПути параметр арг арг ...

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

    имяПути cget параметр

    Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды toplevel. имяПути configure параметр значение параметр значение ...
      Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан вTk_ConfigureInfo). Если параметр задан, а его новое значение ≈ нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения. В этом случае команда возвращает пустую строку. Параметр может быть любым из параметров команды toplevel.
    ПРИВЯЗКИ При создании примитива верхнего уровня никаких привязок не создается: эти примитивы не предполагаются интерактивными.
    winfo
    winfo -возвращает информацию об окне. СИНТАКСИС winfo option ?arg arg ...? ОПИСАНИЕ Команда winfo позволяет получать информацию об окнах, созданных с помощью Tk. Команда имеет несколько допустимых форм в зависимости от указанных опций. Ниже перечислены допустимые формы команды:

    winfo atom ? -displayof window? name

    Команда возвращает десятичную строку ≈ числовой идентификатор атома (напрмер, виджета). Если атома name не существует, он создается. А после создания соответствующего виджета он получает этот идентификатор атома. Если указана опция -displayof window, атом ищется на том же дисплее, на котором находится указанное окно. В противном случае атом ищется на дисплее, на котором размещено главное окно приложения. winfo atomname ?-displayofwindow?id Возвращает текстовое имя атома с идентификатором id. Если указана опция -displayofwindow, атом ищется на том же дисплее, на котором находится указанное окно. В противном случае атом ищется на дисплее, на котором размещено главное окно приложения. Команда является обратной к команде winfo atom. Команда возвращает код ошибки, если атом не существует. winfo cells window Команда возвращает десятичную строку ≈ число возможных цветов в палитре для window. winfo children window Возвращает список полных имен всех потомков окна window. Потомки перечисляются в порядке стека, начиная с нижних. Toplevel-окна также считаются потомками своих логических предков. winfo class window Возвращает класс окна window. winfo colormapfull window Возвращает `1▓, если известно, что палитра (colormap) окна заполнена, и ▒0▓ в противном случае. Палитра считается заполненной, если последняя попытка разместить в ней еще один цвет окончилась неуспешно, а приложение не освободило с того момента не одного цвета в палитре. winfo containing ?-displayof window? rootX rootY Возвращает имя окна, содержащего точку с координатами rootX и rootY. Координаты задаются в экранных единицах (в любой форме, поддерживаемой Tk) в системе координат корневого окна (если используется менеджер виртуального корневого окна, координаты задаются в его системе координат). Если указана опция -displayofwindow, окно ищется на дисплее, содержащем window. В противном случае координаты считаются указанными для дисплея, на котором размещено главное окно приложения. Если данная точка не содержится ни в каком окне приложения, возвращается пустая строка. Если точка содержится в нескольких виджетах (например, в кнопке, лежащей в рамке), преимущество имеют логические потомки. Из окон ⌠одного поколения⌠ выбирается окно, лежащее выше других в стеке. winfo depth window Возвращает ⌠глубину цвета⌠ ≈ число бит на пиксель изображения ≈ для окна window. winfo exists window Возвращает `1▓, если существует окно window, и ▒0▓ в противоположном случае. winfo fpixels window number Возвращает число пикселей (дробное, с плавающей точкой), соответствующее на экране расстоянию number. Расстояние может быть указано в любой форме, поддерживаемой Tk, например, 2.0c или 1i. Чтобы получить целое число пикселей, можно использовать команду winfo pixels. winfo geometry window Возвращает размеры и положение окна в форме ширинаxвысота+x+y. Все размеры приводятся в пикселях. winfo height window Возвращает десятичную строку, содержащую высоту окна в пикселях. Когда окно только что создано, его размер 1 пиксель. Через некоторое время оно принимает правильные размеры. Однако, если вы хотите получить правильные размеры окна сразу после его создания, используйте перед этим команду update, которая приведет к прорисовке окна и формированию его правильных размеров, либо команду winfo reqheight, которая возвращает требуемые, а не реальные размеры окна. winfo idwindow Возвращает шестнадцатеричную строку ≈ зависящий от платформы идентификатор низкого уровня для окна. На Unix-платформах это X-window идентификатор. Под Windows это Windows HWND. На Macintosh этот идентификатор не имеет смысла вне Tk. winfo interps ?-displayof window? Возвращает список всех Tcl-интерпретаторов (например, Tk-приложений), зарегистрированных в текущий момент на определенном дисплее. Если задана опция ?-displayof window?, имеется в виду дисплей, на котором находится окно window. В противном случае ≈ дисплей, на котором находится главное окно приложения. winfo ismapped window Возвращает `1▓, если окно в данный момент размещено на экране, и ▒0▓ в противном случае. winfo manager window Возвращает имя геометрического менеджера, с помощью которого размещено окно, или пустую строку, если окно не размещено. Для виджетов возвращается как правило имя Tcl-команды для соответствующего менеджера, например, pack или place. Для toplevel-окон возвращается wm, для встроенных окон ≈ имя команды для соответствующего класса виджетов, например, canvas. winfo name window Возвращает имя окна, то есть имя относительно родителя в отличие от полного имени. Команда winfo nameвозвращает имя приложения. winfo parent window Возвращает имя логического родителя окна или пустую строку для главного окна приложения. winfo pathname ?-displayof window? id Возвращает полное имя окна с X-идентификатором id. Идентификатор может быть десятичным, шестнадцатеричным или восьмеричным числом и должен принадлежать одному из окон приложения. Если указана опция -displayofwindow, окноищется на том же дисплее, на котором находится указанное окно. В противном случае окно ищется на дисплее, на котором размещено главное окно приложения. winfo pixels window number Возвращает число пикселей, соответствующее на экране расстоянию number. Расстояние может быть указано в любой форме, поддерживаемой Tk, например, 2.0c или 1i. Результат округляется до ближайшего целого. Чтобы получить дробное число пикселей, можно использовать команду winfo fpixels. winfo pointerx window Если указатель ⌠Мыши■ находится на том же экране, что и окно, возвращает x- координату пойнтера в пикселях в системе координат корневого окна. Если на экране есть виртуальное корневое окно, возвращаются координаты в его системе координат. Если пойнтера ⌠Мыши■ на данном экране нет, возвращается `-1▓. winfo pointerxy window Если указатель ⌠Мыши■ находится на том же экране, что и окно, возвращает список, содержащий x- и y-координаты пойнтера в пикселях в системе координат корневого окна. Если на экране есть виртуальное корневое окно, возвращаются координаты в его системе координат. Если пойнтера ⌠Мыши■ на данном экране нет, возвращается ▒-1▓. winfo pointery window Если указатель ⌠Мыши■ находится на том же экране, что и окно, возвращает y-координату пойнтера в пикселях в системе координат корневого окна. Если на экране есть виртуальное корневое окно, возвращаются координаты в его системе координат. Если пойнтера ⌠Мыши■ на данном экране нет, возвращается `-1▓. winfo reqheight window Возвращает десятичную строку, содержащую необходимую высоту окна. Это та величина, которая используется менеджером окна при расчете его размеров. winfo reqwidth window Возвращает десятичную строку, содержащую необходимую ширину окна. Это та величина, которая используется менеджером окна при расчете его размеров. winfo rgb window color Возвращает список из трех десятичных величин, указывающих интенсивность красного, зеленого и синего цвета для цвета color в окне window. Цвет может быть задан в любой форме, в которой он может задаваться в соответствующих опциях. winfo rootx window Возвращает десятичную строку, содержащую x-координату левого верхнего угла рамки окна (или самого окна, если оно не имеет рамки) в системе координат корневого окна. winfo rooty window Возвращает десятичную строку, содержащую y-координату левого верхнего угла рамки окна (или самого окна, если оно не имеет рамки) в системе координат корневого окна. winfo screen window Возвращает имя экрана, на котором отображается окно, в форме ИмяДисплея.ИндексЭкрана. winfo screencells window Возвращает число цветов в палитре по умолчанию для экрана, содержащего данное окно. winfo screendepth window Возвращает ⌠глубину цвета⌠ ≈ число бит на пиксель изображения ≈ для экрана, содержащего окно window. winfo screenheight window Возвращает десятичную строку, содержащую высоту экрана, содержащего окно window, в пикселях. winfo screenmmheight window Возвращает десятичную строку, содержащую высоту экрана, содержащего окно window, в миллиметрах. winfo screenmmwidth window Возвращает десятичную строку, содержащую ширину экрана, содержащего окно window, в миллиметрах. winfo screenvisual window Возвращает одну из строк, указывающих класс (по умолчанию) экрана, на котором находится окно window: directcolor, grayscale, pseudocolor, staticcolor, staticgray, или truecolor. winfo screenwidth window Возвращает десятичную строку, содержащую ширину экрана, содержащего окно window, в пикселях. winfo server window Возвращает строку, содержащую информацию о сервере дисплея, на котором находится окно. Точная форма строки зависит от платформы. Для X-сервера строка имеет вид ⌠XmajorRminor vendor vendorVersion⌠ где major и minor соответственно версия и релиз сервера (например, X11R5), vendor ≈ имя поставщика , vendorRelease ≈ номер релиза сервера, назначенный поставщиком. winfo toplevel window Возвращает полное имя ближайшего toplevel-окна, содержащего window. winfo viewable window Возвращает `1▓, если окно и его предки вплоть до ближайшего toplevel размещены, и ▒0▓ в противном случае. winfo visual window Возвращает одну из строк, указывающих класс окна window: directcolor, grayscale, pseudocolor, staticcolor, staticgray, или truecolor. winfo visualid window Возвращает X-идентификатор класса (возвращаемого командой winfo visual) для окна window. winfo visualsavailable window ?includeids? Возвращает список, элементы которого описывают режимы, допустимые для экрана, содержащего окно. Каждый элемент состоит из имени класса и глубины цвета. Имена класса такие же, как для команды winfovisual. Глубина указывает число битов на пиксель. Если задана опция includeids, за глубиной следует X-идентификатор класса. winfo vrootheight window Возвращает высоту виртуального корневого окна для window, если такое есть. В противном случае возвращает высоту экрана, на котором размещено окно window. winfo vrootwidth window Возвращает ширину виртуального корневого окна дляwindow, если такое есть. В противном случае возвращает ширину экрана, на котором размещено окно window. winfo vrootx window Возвращает x-координату корневого окна в системе координат вируального корневого окна. Обычно ▒0▓ или отрицательное число. Если виртуального корневого окна на существует, возвращет `0▓. winfo vrooty window Возвращает y-координату корневого окна в системе координат вируального корневого окна. Обычно ▒0▓ или отрицательное число. Если виртуального корневого окна на существует, возвращает ⌠0■. winfo width window Возвращает десятичную строку, содержащую ширину окна в пикселях. Когда окно только что создано, его размер 1 пиксель. Через некоторое время оно принимает правильные размеры. Однако, если вы хотите получить правильные размеры окна сразу после его создания, используйте перед этим команду update, которая приведет к прорисовке окна и формированию его правильных размеров, либо команду winfo reqwidth, которая возвращает требуумые, а не реальные размеры окна. winfo x window Возвращает десятичную строку, содержащую x-координату левого верхнего угла рамки окна (или самого окна, если оно не имеет рамки) в системе координат окна ≈ предка. winfo y window Возвращает десятичную строку, содержащую x-координату левого верхнего угла рамки окна (или самого окна, если оно не имеет рамки) в системе координат окна ≈ предка.
    Wm
    Команда взаимодействия с менеджером окон.
     
  • Синтаксис
  • Описание
  • Управление геометрией
  • Управление окнами с сеткой
  • Ошибки
  • СИНТАКСИС wm option window ?args? ОПИСАНИЕ Команда wm предназначена для взаимодействия с менеджером окон и обеспечивает таким образом управление такими атрибутами окон, как заголовок, размеры и размещение, возможность изменять размер. Команда имеет несколько форм в зависимости от используемых опций. Во всех формах команда предполагает наличие по крайней мере одного аргумента ≈ имени toplevel окна.

    Ниже перечислены возможные формы команды.

    wm aspect window ?minNumer minDenom maxNumer maxDenom?

    Если аргументы minNumer, minDenom, maxNume и maxDenom заданы, они передаются менеджеру окон, который использует их для определения допустимых пропорций окна. Пропорции (отношение ширина ≈ высота) могут быть в диапазоне от minNumer/minDenom до maxNumer/maxDenom. Если аргументы minNumer и т.д. определены как пустые строки, то существующие ограничения на пропорции отменяются. Если аргументы minNumer и т.д. заданы, то команда возвращает пустое значение. В противном случае она возвращает список из четырех элементов ≈ текущих значений minNumer, minDenom, maxNumer, и maxDenom (если ограничения не заданы, возвращается пустая строка). wm client window ?name? Если имя name указано (name должно быть именем компьютера, на котором исполняется приложение), то оно сохраняется в свойстве окна WM_CLIENT_MACHINE и может использоваться менеджером окон или менеджером сессий. В этом случае команда возвращает пустую строку. Если аргумент name не задан, команда возвращает последнее установленное ранее значение свойства. Если аргумент name определен как пустая строка, свойство окна WM_CLIENT_MACHINE удаляется. wm colormapwindows window ?windowList? Эта команда используется для управления свойством WM_COLORMAP_WINDOWS, которое обеспечивает менеджер окон информацией об окнах, имеющих собственную палитру. Если аргумент windowListне задан, команда возвращает список окон, имеющих собственную палитру. Если аргумент задан, он представляет собой список полных имен окон. Команда изменяет старое значение свойства на новое и возвращает пустую строку. Список окон перечисляет внутренние окна, палитра которых отличается от палитры их логических предков. Порядок, в котором перечислены окна, указывает порядок, в котором менеджер окон просматривает окна, пытаясь разместить новые цвета в палитре. Не указанные в списке окна обрабатываются в последнюю очередь. Если команда не использовалась, Tk автоматически устанавливает свойство для каждого toplevel окна. В списке перечисляются все его внутренние окна, имеющие собственную палитру, в случайном порядке. В конце списка указывается само toplevel окно. Более подробно свойство WM_COLORMAP_WINDOWS описано в (1). wm command window ?value? Если аргумент value задан, команда сохраняет его значение в свойстве окна WM_COMMAND, которое используется менеджером окон или менеджером сессий. В этом случае команда возвращает пустую строку. Аргумент value должен содержать список, элементы которого являются словами команды, используемой для запуска приложения (см. также wmuse). Если аргумент value не задан, команда возвращает последнее установленное ранее значение свойства. Если аргумент name определен как пустая строка, свойство окна WM_COMMAND удаляется.

    wm deiconify window

    Заставляет окно появиться на экране в нормальном виде (а не в виде иконки, например,). Если окно ранее не появлялось на экране, выполнение команды не приведет к его появлению, но она гарантирует, что если в будущем окно появится, оно появится в нормальном виде. Команда возвращает пустую строку. wm focusmodel window ?active|passive? Если тип фокуса для (active или passive) окна указан в команде, он определяет какой тип фокуса будет использоваться. В этом случае команда возвращает пустую строку. Если тип фокуса не указан, команда возвращает текущее значение типа. Активный тип фокуса означает, что окно запрашивает фокус ввода себе или своим потомкам, даже если в этот момент фокус находится в другом приложении. Пассивный фокус означает, что окно не запрашивает фокус, а получает его от менеджера окон. Однако, после того, как окно или один из его потомков получил фокус, приложение может передать его другому потомку окна. По умолчанию устанавливает пассивный фокус. wm frame window Если окно заключено менеджером окон в декоративную рамку, команда возвращает идентификатор самой внешней рамки, которая содержит окно (окно, являющееся потомком корневого окна или виртуального корневого окна). Вид идентификатора зависит от платформы. Если окно не заключено в рамку, возвращается идентификатор окна, вид которого также зависит от платформы. wm geometry window ?newGeometry?

    Если задан аргумент newGeometry, размеры и размещение окна изменяются, а команда возвращает пустую строку. В противном случае возвращается последняя информация о размерах и размещении окна (независимо от того, была ли она задана путем изменения размеров окна вручную или с помощью команды wm). Аргумент newGeometry должен быть задан в следующем виде =ширинаxвысота╠x╠y, где любая из частей =ширинаxвысота или ╠x╠y может быть опущена. Ширина и высота должны быть положительными целыми числами, задающими желаемый размер окна. Если для окна задана сетка (см. ⌠Управление окнами с сеткой■), размеры указываются в шагах сетки. В противном случае размеры указываются в пикселях. X и Y определяют желаемое размещение окна на экране в пикселях. Если перед x стоит ▒+▓, то величина x определяет расстояние от левого края экрана до левого края окна, в противном случае x задает расстояние от правого края экрана до правого края окна. Если перед y стоит ▒+▓, то величина y определяет расстояние от верхнего края экрана до верхнего края окна, в противном случае y задает расстояние от низа экрана до нижнего края окна. Если аргумент newGeometry задан как пустая строка, текущие установленные пользователем размеры окна отменяются и окно приобретает размеры, определяемые размерами составляющих его виджетов.

    wm grid window ?baseWidth baseHeight widthInc heightInc?

    Команда определяет наличие сетки в окне и позволяет задать шаг сетки в пикселях. BaseWidth и baseHeight определяют в единицах сетки исходный размер окна (определяемый, исходя из размеров виджетов). WidthInc и heightInc определяют соответственно горизонтальный и вертикальный шаг сетки. Таким образом, эти четыре величины определяют множество допустимых размеров окна. После выполнения этой команды команда wm geometry считает размеры окна заданными в шагах сетки. Более того, при ручном изменении размеров менеджер окон показывает размер окна в шагах (ячейках) сетки и позволяет изменять размер только дискретно в целых шагах сетки.
    Если BaseWidth и последующие аргументы команды ≈ пустые строки, команда указывает, что окно больше не имеет сетки.
    Если BaseWidth и последующие аргументы заданы, команда возвращает пустую строку. В противном случае команда возвращает список из четырех элементов, содержащий текущие значения BaseWidth и последующих аргументов. Если окно не имеет сетки ≈ возвращается пустая строка.


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

    wm group window ?pathName?

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


    wm iconbitmap window ?bitmap?

    Если аргумент bitmap задан, он определяет имя растрового образа, которое передается менеджеру окон для использования в качестве иконки. Имя образа может быть задано в одной из следующих форм: @ИмяФайла ≈ файл должен содержать описание растрового рисунка в формате, соответствующем стандарту X11 или X10;

    name ≈ имя образа типа bitmap, ранее созданного в приложении.

    Если аргумент bitmap представляет собой пустую строку, отменяется использование ранее заданного образа.

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

    wm iconify window

    Команда сворачивает указанное окно. Если окно еще не было размещено на экран, оно появится, когда это произойдет, в виде иконки. wm iconmask window ?bitmap? Если аргумент bitmap задан, он определяет имя растрового образа, которое передается менеджеру окон для использования в качестве маски для иконки. Там, где маска имеет значение ⌠0■, образ иконки не отображается; там, где маска имеет значение ⌠1■, маска рисуется. Имя образа может быть задано в одной из следующих форм: @ИмяФайла ≈ файл должен содержать описание растрового рисунка в формате, соответствующем стандарту X11 или X10;

    name ≈ имя образа типа bitmap, ранее созданного в приложении.

    Если аргумент bitmap представляет собой пустую строку, отменяется использование ранее заданной маски (это эквивалентно заданию маски из одних единиц).

    Если аргумент bitmap задан, команда возвращает пустую строку. В противном случае команда возвращает имя образа, используемого для маски для данного окна, либо пустую строку, если маска не задана.

    wm iconname window ?newName?

    Если аргумент newName задан, он передается менеджеру окон для использования в качестве имени иконки для окна. В этом случае команда возвращает пустую строку. Если аргумент newNameне задан, команда возвращает текущее имя иконки для окна; если имя иконки не задано, команда возвращает пустую строку (в этом случае менеджер окон использует в качестве имени иконки имя окна, заданное с помощью команды wmtitle). wm iconposition window ?x y? Если аргументы x и y заданы, они передаются менеджеру окон и используются как подсказка при размещении иконки окна window. В этом случае команда возвращает пустую строку. Если x и y представляют собой пустые строки, команда отменяет ранее определенную подсказку для размещения иконки. Если аргументы x и y не заданы, команда возвращает текущее значение подсказки (или пустую строку, если она не задана). wm iconwindow window ?pathName? Если аргумент pathName указан, он определяет имя окна, которое используется в качестве иконки для окна window: кодгда окно window свертывается, появляется окно pathName, которое используется в качестве иконки. Когда окно window разворачивается, окно pathName выводится с экрана. Если аргумент pathName представляет собой пустую строку, ранее определенное окно больше не используется как иконка. Если аргумент pathName указан, команда возвращает пустую строку. В противном случае команда возвращает имя окна, ранее заданного в качестве иконки, или пустую строку, если ранее оно не было задано.

    Нажатие на кнопку ⌠Мыши■ в окне-иконке не обрабатываются приложением, что позволяет обрабатывать эти события менеджеру окон.

    Замечание. Не все менеджеры окон позволяют использовать Tk-окно в качестве иконки.

    wm maxsize window ?width height?

    Если аргументы width и height заданы, они задают максимальный возможный размер окна. Если в окне определена сетка, размеры указываются в шагах сетки. В противном случае размеры указываются в пикселях. Менеджер окон не позволяет окну становиться больше, чем задано в команде.
    Если аргументы width и height заданы, команда возвращает пустую строку, в противном случае она возвращает список, содержащий два элемента: текущие ограничения на размер окна. По умолчанию максимальные размеры окна равны размеру экрана. Если изменение размеров окна запрещено с помощью команды wm resizable, команда wmmaxsize не влияет на коно. Более подробно этот вопрос рассмотрен ниже (см. ⌠Управление геометрией■)


    wm minsize window ?width height?

    Если аргументы width и height заданы, они задают минимальный возможный размер окна. Если в окне определена сетка, размеры указываются в шагах сетки. В противном случае размеры указываются в пикселях. Менеджер окон не позволяет окну становиться меньше, чем задано в команде.
    Если аргументы width и height заданы, команда возвращает пустую строку, в противном случае она возвращает список, содержащий два элемента: текущие ограничения на размер окна. По умолчанию минимальные размеры окна равны одному пикселю в каждом направлении. Если изменение размеров окна запрещено с помощью команды wm resizable, команда wm maxsize не влияет на окно. Более подробно этот вопрос рассмотрен ниже (см. ⌠Управление геометрией■).


    wm overrideredirect window ?boolean?

    Если аргумент boolean задан, он должен быть булевой величиной. Его значение присваивается override-redirect флагу окна. Если аргумент не задан, команда возвращает ▒1▓ или ▒0▓, в зависимости от того, установлен ли флаг для window.
    Установка флага приводит к тому, что окно не управляется менеджером окон. В частности, окно не будет заключено в декоративную рамку и пользователь не сможет изменять размеры и положение окна, используя стандартные механизмы менеджера окон.


    wm positionfrom window ?who?

    Если аргумент who задан, он должен иметь одно из двух значений program или user (или произвольное сокращение от одного из них). Оно определяет, будет ли размещение окна определяться программой или пользователем. Многие менеджеры окон игнорируют запрошенное программой начальное размещение окна и требуют от пользователя разместить его вручную. Если задано значение user, менеджер окон не требует этого от пользователя. Если аргумент who задан как пустая строка, текущая установка отменяется.
    Если аргумент who задан, команда возвращает пустую строку. В противном случае команда возвращает установленное ранее значение или пустую строку, если значение не было установлено. Большинство менеджеров окон считают, что если ⌠источник⌠ не задан, это то же самое, что program. Tk автоматически устанавливает значение user при выполнении команды wm geometry, если ранее не было установлено явно значение program.


    wm protocol window ?name? ?command?
     

    Эта команда используется для организации обработки сообщений (протоколов) менеджера окон, таких как WM_DELETE_WINDOW. Аргумент name, если он задан, должен быть именем элемента (атома) протокола менеджера окон. Если заданы оба аргумента name и command, команда command ассоциируется с протоколом name. Значение name добавляется к свойству окна WM_PROTOCOLS, чтобы указывать менеджеру окон, что приложение имеет обработчика соответствующего сообщения, и какая команда должна быть выполнена впоследствии, когда менеджер окон пошлет клиентской программе соответствующее сообщение. В этом случае команда возвращает пустую строку. Если аргумент name задан, а command ≈ нет, будет возвращена команда, ассоциированная с данным протоколом или пустая строка, если такой команды нет. Если command определена как пустая строка, текущий обработчик соответствующего события будет отменен, а имя протокола будет удалено из свойства PROTOCOLS окна window. Команда возвратит пустую строку. И наконец, если ни name, ни command не заданы, команда возвратит список протоколов, для которых заданы обработчики событий для данного окна.


    Tk всегда определяет обработчик событий для протокола WM_DELETE_WINDOW, даже если он не был задан с помощью команды wm protocol. Если обработчик события не был задан явно, то, когда поступает сообщение WM_DELETE_WINDOW, Tk удаляет окно, для которого было получено это сообщение.

    wm resizable window ?width height?

    Эта команда управляет возможностью пользователя интерактивно изменять размеры окна. Если аргументы width и height заданы, они должны быть булевыми величинами, определяющими, может ли пользователь изменять в интерактивном режиме ширину и высоту окна соответственно. Команда при этом возвращает пустую строку. Если аргументы width и height отсутствуют, команда возвращает список из двух элементов, принимающих значение ▒0▓ или ▒1▓ и указывающих, может ли пользователь изменять высоту и ширину окна соответственно. По умолчанию пользователь может изменять размеры окна в обоих направлениях.

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

    wm sizefrom window ?who? Если аргумент who задан, он должен иметь одно из двух значений program или user (или произвольное сокращение от одного из них). Оно определяет, будет ли размер окна определяться программой или пользователем. Многие менеджеры окон игнорируют запрошенный программой начальный размер окна и требуют от пользователя определить его размер вручную. Если задано значение user, менеджер окон не требует этого от пользователя. Если аргумент who задан как пустая строка, текущая установка отменяется.

    Если аргумент who задан, команда возвращает пустую строку. В противном случае команда возвращает установленное ранее значение; если значение не было установлено, команда возвращает пустую строку. Большинство менеджеров окон считают, что если ⌠источник⌠ не задан, это то же самое, что program.

    wm state window Команда возвращает текущее состояние окна: normal, iconic, withdrawn или icon. Разница между iconic и icon в том, что iconic используется для свернутого окна (например, с помощью команды wm iconify ), а icon ≈ для окна, которое используется в качестве иконки для другого окна (с помощью команды wm iconwindow). wm title window ?string? Если аргумент string определен, он передается менеджеру окон для использования в качестве имени (титула) окна, которое менеджер окон высвечивает на рамке окна. В этом случае команда возвращает рустую строку. Если аргумент string не задан, команда возвращает ранее установленный заголовок. По умолчанию титул окна совпадает с его полным именем как виджета. wm transient window ?master? Если аргумент master задан, команда передает менеджеру окон информацию о том, что окно window является временным окном (например, выпадающим меню), работающим под управлением master-окна (где master ≈ полное имя toplevel-окна). Некоторые менеджеры окон используют эту информацию для того, чтобы управлять таким окном специальным образом. Если аргумент master представляет собой пустую строку, окно перестает быть временным окном.

    Если аргумент master задан, команда возвращает пустую строку. В противном случае она возвращает имя управляющего окна или пустую строку, если окно window не является временным.

    wm withdraw window При выполнении команды окно window удаляется с экрана. Информация о нем удаляется из менеджера окон. Если окно не присутствовало на экране ранее, оно не появится на экране при создании. Но не все менеджеры окон знают, как работать с такими окнами! Замечание. Иногда оказывается необходимым удалить окно с помощью команды wm withdraw, а затем возвратить его обратно на экран (например, с помощью команды wm deiconify), чтобы менеджер окон учитывал некоторые его атрибуты, например, группу.
    УПРАВЛЕНИЕ ГЕОМЕТРИЕЙ По умолчанию toplevel-окна при появлении на экране имеют размеры, определяемые размерами составляющих его виджетов (⌠естественные⌠ размеры). Если изменяются размеры или состав виджетов, то изменяется и размер toplevel-окна. Для toplevel-окна размеры, отличные от ⌠естественных⌠, могут быть заданы двумя способами. Первый ≈ пользователь может изменить размеры окна вручную, используя стандартные механизмы менеджера окон. Второй ≈ приложение может запросить изменение размеров окна с помощью команды wm geometry. Оба зти способа обрабатываются в Tk единообразно. Размеры окна изменяются на новые, отличные от ⌠естественных⌠. Чтобы вернуть ⌠естественные⌠ размеры окна, нужно выполнить команду wm geometry с пустой строкой в качестве аргумента, задающего размеры и размещение окна.

    Обычно размеры окна могут изменяться произвольно в диапазоне от 1 пикселя до размеров экрана. Однако, с помощью команд wm minsize и wm maxsize можно изменить область возможных размеров окна. Эти ограничения будут использоваться при всех способах изменения размеров окна, в том числе и при ручном изменении, и при изменении размеров и состава его виджетов, приводящем к изменению его ⌠естественных⌠ размеров. С помощью команды wm resizable можно полностью запретить изменение размеров окна каким-либо способом в одном или в обоих направлениях.

    УПРАВЛЕНИЕ ОКНАМИ С СЕТКОЙ Окна с сеткой используются, если один из виджетов окна имеет ограниченное множество ⌠разумных⌠ размеров. Например, в текстовом редакторе, где полосы прокрутки, меню и т. д. имеют фиксированный размер, а поле редактирования текста может содержать произвольное число строк или букв в строке. В этом случае желательно дать пользователю возможность устанавливать непосредственно число строк или букв в строке при изменении размеров окна как вручную, так и с помощью команды wm geometry. Как в случае с текстом, так и в других аналогичных, ⌠разумным⌠ является не всякий размер окна в пикселях, а только размеры, соответствующие целому числу строк или букв в строке.

    Введение сетки обеспечивает механизм для реализации этих требований. Tk (и менеджер окон) предполагают существование сетки в окне, и что ⌠разумными⌠ являются только размеры, выраженные в целых шагах сетки, а не в произвольном числе пикселей. Обычно сетка устанавливается с помощью опции setGrid для соответствующего виджета. Она может также устанавливаться с помощью команды wm grid. В любом случае с помощью виджета или кода приложения определяются размеры окна в пикселях, соответствующие целым размерам в шагах сетки. Чтобы отменить сетку, нужно выполнить команду wm grid с пустой строкой, задающей сетку.

    Если сетка задана, все определения размеров в командах wm minsize, wm maxsize и wm geometry считаются заданными в шагах сетки, а не в пикселях. Ручное изменение размеров окна также производится в целых шагах сетки.

    ОШИБКИ Как оказалось, большинство существующих менеджеров окон имеют некоторые ошибки, которые проявляются при выполнении команды wm. Например, некоторые изменения не производятся в окне, если оно активно. Окно должно быть выведено с экрана и возвращено обратно, чтобы изменения выполнились.
    Все права защищены 1992-1999 DataX/FLORIN, Inc.

    table

    Создание таблиц и действия с ними

    Команда становится доступной для выполнения после загрузки библиотеки Tktable2.3 командой:

    load /usr/local/lib/Tktable2.3/Tktable.so.2.3
  • Синтаксис
  • Стандартные опции
  • Специальные опции команды
  • Описание команды
  • Инициализация
  • Индексы
  • Теги
  • Встроенные окна
  • Выбор
  • Командные подстановки
  • Команды виджета
  • Стандартное поведение
  • СИНТАКСИС table имя виджета ? опции ? СТАНДАРТНЫЕ ОПЦИИ
       
    -anchor  -background  -borderwidth 
    -cursor -exportselection -font 
    -foreground -highlightbackground -highlightcolor 
    -highlightthickness -insertbackground -insertborderwidth
    -insertofftime  -insertontime  -insertwidth
    -invertselected  -padx -pady
    -relief -takefocus -xscrollcommand
    -yscrollcommand    
    Детальное описание стандартных опций (см. "Опции). СПЕЦИАЛЬНЫЕ ОПЦИИ КОМАНДЫ Имя опции в Командной строке: -autoclear
    Имя опции в Базе данных Х ресурсов: autoClear
    Имя Класса в Базе данных Х ресурсов: AutoClear
    Булева величина, которая определяет, будет ли по первому нажатию на клавишу удаляться из ячейки тот текст, который был прежде там. Значение по умолчанию - 0.
      Имя опции в Командной строке:-bordercursor
    Имя опции в Базе данных Х ресурсов: borderCursor
    Имя Класса в Базе данных Х ресурсов: Cursor


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

     
    Имя опции в Командной строке:-browsecommand или -browsecmd
    Имя опции в Базе данных Х ресурсов: browseCommand
    Имя Класса в Базе данных Х ресурсов: BrowseCommand


    Определяет команду, которая выполняется каждый раз, когда изменяется активная ячейка. В команде могут использоваться %-подстановки, описанные ниже в разделе  Командные подстановки.
     

    Имя опции в Командной строке:-cache
    Имя опции в Базе данных Х ресурсов: cache
    Имя Класса в Базе данных Х ресурсов: Cache


    Булева величина, которая определяет, будет ли использоваться внутренний кеш таблицы. Его использование позволяет существенно повысить производительность при использовании опции -command, но требует дополнительной памяти. Может улучшить производительность и тогда, когда опции -command и -variable не заданы. Кеш автоматически сбрасывается всякий раз при изменении опций -cache и -variable, в противном случае Вы должны сами сделать это. Значение по умолчанию - ложь.
     

    Имя опции в Командной строке:-colorigin
    Имя опции в Базе данных Х ресурсов: colOrigin
    Имя Класса в Базе данных Х ресурсов: Origin
    Определяет, какой индекс столбца является самым левым столбцом в таблице. Эта величина используется для пользовательских индексов в таблице. Значение по умолчанию - '0'.
      Имя опции в Командной строке:-cols
    Имя опции в Базе данных Х ресурсов: cols
    Имя Класса в Базе данных Х ресурсов: Cols


    Число столбцов в таблице. Значение по умолчанию - '10'.

     
    Имя опции в Командной строке:-colseparator
    Имя опции в Базе данных Х ресурсов: colSeparator
    Имя Класса в Базе данных Х ресурсов: Separator


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

    Имя опции в Командной строке:-colstretchmode
    Имя опции в Базе данных Х ресурсов: colStretchMode
    Имя Класса в Базе данных Х ресурсов: StretchMode
    Определяет один из следующих способов расширения столбцов для заполнения дополнительного пространства окна:

    none

    Столбцы не расширяются и не заполняют все отведенное пространство окна таблицы. Если столбцы слишком узки, то в таблице справа будет пробел. Это - значение по умолчанию. unset Расширяются только те столбцы, которые не имеют явно заданной ширины. all Все столбцы расширяются на одно и то же количество пикселей, чтобы заполнить все пространство окна. В этом режиме могут возникнуть трудности при ручном изменении размеров ширины ячейки. fill (используется только при значении опции -rowstretch, равном currently) В таблице получится больше или меньше столбцов в соответствии с величиной отведенного пространства. Этот способ имеет многочисленные причуды и может исчезнуть в будущем. last Последний столбец расширяется так, чтобы заполнить все пространство окна таблицы. Имя опции в Командной строке:-coltagcommand
    Имя опции в Базе данных Х ресурсов: colTagCommand
    Имя Класса в Базе данных Х ресурсов: TagCommand


    Задает имя процедуры, которая выполняется, чтобы определить тэг, который используется для данного столбца. Чтобы определить, как отображать ячейку, сначала проверяется, не задан ли тэг для столбца с помощью команды tag col. Если тэг для столбца не задан, выполняется процедура, определенная с помощью настоящей опции. Процедура получает номер столбца в качестве единственного аргумента. Процедура должна возвратить имя тэга или пустую строку. Если при выполнении процедуры происходит ошибка или процедура возвращает недопустимое имя тэга, сообщения об ошибке не выдается.
     

    Имя опции в Командной строке:-colwidth
    Имя опции в Базе данных Х ресурсов: colWidth
    Имя Класса в Базе данных Х ресурсов: ColWidth
    Задает ширину столбца по умолчанию. Ширина столбца определяется в символах шрифта (используемого по умолчанию), если она является положительным числом, или в пикселях, если она является отрицательным числом. Значение по умолчанию - `10'.
      Имя опции в Командной строке:-command
    Имя опции в Базе данных Х ресурсов: command
    Имя Класса в Базе данных Х ресурсов: Command


    Определяет команду, которая используется в качестве процедурного интерфейса к содержимому ячеек. Если опция -usecommand имеет значение истина, эта команда будет использоваться вместо любой ссылки на массив - variable. При выборе значения из таблицы вместо содержимого ячейки возвращается результат выполнения команды. Использует %-подстановки, описанные ниже в разделе  Командные подстановки.
     

    Имя опции в Командной строке:-drawmode
    Имя опции в Базе данных Х ресурсов: drawMode
    Имя Класса в Базе данных Х ресурсов: DrawMode


    Устанавливает один из следующих режимов рисования таблицы:

    slow

    Таблица предварительно формируется в памяти (offscreen pixmap) с использованием двойной буферизации. Для границ используются Tk-функции. Этот способ исключает мигание, но оказывается медленным для больших таблиц. compatible Таблица изображается непосредственно на экране с использованием Tk-функций для границ. Это более быстрый способ, но экран может мигать При изменениях. Это - значение по умолчанию. fast Таблица изображается непосредственно на экране, причем границы рисуются с использованием быстрых X-вызывов, то есть шириной в один пиксель. Как побочный эффект, сужается область значений допустимых значений опции -borderwidth до `0' и `1'. Этот способ обеспечивает наилучшую производительность для больших таблиц, но при этом возможно мигание. Кроме того, этот способ допустим не при всех возможных в Tk значениях ширины границы. single Таблица рисуется на экране как в режиме fast, но линии изображаются только одним пикселем. Имя опции в Командной строке: -flashmode
    Имя опции в Базе данных Х ресурсов: flashMode
    мя Класса в Базе данных Х ресурсов: FlashMode
    Булево значение, которое определяет, будут ли ячейки мигать, когда их величина изменяется. Тэг flash назначается этим ячейкам на время, определенное с помощью опции -flashtime. По умолчанию устанавливается на 0.
      Имя опции в Командной строке:-flashtime
    Имя опции в Базе данных Х ресурсов: flashTime
    Имя Класса в Базе данных Х ресурсов: FlashTime


    Время в четвертях секунды, в течение которого ячейка высвечивается при изменении величины. Опция -flashmode должно иметь значение on. Значение по умолчанию - 2.
     

    Имя опции в Командной строке:-height
    Имя опции в Базе данных Х ресурсов: height
    Имя Класса в Базе данных Х ресурсов: Height


    Определяет желаемую высоту для окна в рядах ячеек. Если задано нуль или менее, высота окна выбирается достаточно большой, чтобы содержать все ряды таблицы. Высота может ограничиваться с помощью опции -maxheight.
     

    Имя опции в Командной строке:-invertselected
    Имя опции в Базе данных Х ресурсов: invertSelected
    Имя Класса в Базе данных Х ресурсов: InvertSelected


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

    Имя опции в Командной строке:-maxheight
    Имя опции в Базе данных Х ресурсов: maxHeight
    Имя Класса в Базе данных Х ресурсов: MaxHeight
    Максимально возможная высота окна в пикселях. Значение по умолчанию - 600.
      Имя опции в Командной строке:-maxwidth
    Имя опции в Базе данных Х ресурсов: maxWidth
    Имя Класса в Базе данных Х ресурсов: MaxWidth
    Максимально возможная ширина окна в пикселях. Значение по умолчанию - 800.
      Имя опции в Командной строке:-multiline
    Имя опции в Базе данных Х ресурсов: multiline
    Имя Класса в Базе данных Х ресурсов: Multiline
    Определяет значение по умолчанию для опции тэгов -multiline. Значение по умолчанию - `1'.
      Имя опции в Командной строке:-resizeborders
    Имя опции в Базе данных Х ресурсов: resizeBorders
    Имя Класса в Базе данных Х ресурсов: ResizeBorders
    Определяет возможность интерактивного изменения размеров ячеек. Допустимые значения опции - row, col, both (по умолчанию) и none.
      Имя опции в Командной строке:-rowheight
    Имя опции в Базе данных Х ресурсов: rowHeight
    Имя Класса в Базе данных Х ресурсов: RowHeight
    Высота колонки по умолчанию. Задается в числе строк текста (шрифта, устанавливаемого по умолчанию), когда число является положительными, или в пикселях, если оно - отрицательное. Значение по умолчанию - `1'.
      Имя опции в Командной строке:-roworigin
    Имя опции в Базе данных Х ресурсов: rowOrigin
    Имя Класса в Базе данных Х ресурсов: Origin
    Определяет, какую строку считать самой верхней строкой таблицы. Эта величина используется для индексов пользователя в таблице. По умолчанию устанавливается на "0".
    Имя опции в Командной строке:-rows
      Имя опции в Базе данных Х ресурсов: rows
    Имя Класса в Базе данных Х ресурсов: Rows
    Количество строк в таблице. Значение по умолчанию - `10'.
      Имя опции в Командной строке:-rowseparator
    Имя опции в Базе данных Х ресурсов: rowSeparator
    Имя Класса в Базе данных Х ресурсов: Separator
    Определяет символ, который будет проинтерпретирован как разделитель строк при вставке или удалении данных из таблицы. По умолчанию, строки разделяются как списки tcl.
      Имя опции в Командной строке:-rowstretchmode
    Имя опции в Базе данных Х ресурсов: rowStretchMode
    Имя Класса в Базе данных Х ресурсов: StretchMode
    Определяет способ расширения строк для заполнения дополнительного пространства окна. Допустимые значения опции такие же, как для опции -colstretchmode.
      Имя опции в Командной строке:-rowtagcommand
    Имя опции в Базе данных Х ресурсов: rowTagCommand
    Имя Класса в Базе данных Х ресурсов: TagCommand
    Задает имя процедуры, которая выполняется, чтобы определить тэг, который используется для данной строки. Процедура определяется пользователем. Она получает номер строки в качестве единственного аргумента. Процедура должна возвратить имя тэга или пустую строку. Опция аналогична опции -coltagcommand и отличается только тем, что задает тэг строки.   Имя опции в Командной строке:-selectioncommand or -selcmd
    Имя опции в Базе данных Х ресурсов: selectionCommand
    Имя Класса в Базе данных Х ресурсов: SelectionCommand
    Определяет команду, которая выполняется при получении значений ячеек через механизм выбора (например, при выполнении команды "selection get"). Результат выполнения команды возвращается как результат выбора. В команде могут использоваться %-подстановки, описанные ниже в разделе  Командные подстановки. Если при выполнении команды происходит ошибка, она обрабатывается как ошибка фонового Tcl процесса и команда ничего не возвращает.  
    Имя опции в Командной строке:-selectmode
    Имя опции в Базе данных Х ресурсов: selectMode
    Имя Класса в Базе данных Х ресурсов: SelectMode
    Определяет один из возможных режимов выбора ячеек. Величина опции может быть произвольной, но встроенная обработка имеется только для следующих режимов: single, browse, multiple и extended; значение по умолчанию browse. Эти режимы аналогичны соответствующим режимам для Tk listbox, за исключением того, что они применяются для двумерных таблиц.  
    Имя опции в Командной строке:-selecttitle
    Имя опции в Базе данных Х ресурсов: selectTitles
    Имя Класса в Базе данных Х ресурсов: SelectTitles
    Определяет, допускается ли выбор ячеек заголовков. По умолчанию устанавливается на '0' (выбор не допускается).  
    Имя опции в Командной строке:-selecttype
    Имя опции в Базе данных Х ресурсов: selectType
    Имя Класса в Базе данных Х ресурсов: SelectType
    Определяет один из различных типов выбора для таблицы. Опция может принимать одно из значений: row, col, cell, или both (означает row && col); значение по умолчанию cell. Определяет, будет ли изменение выбора для ячейки (установление или снятие) воздействовать на весь ряд и(или) колонку.  
    Имя опции в Командной строке:-state
    Имя опции в Базе данных Х ресурсов: state
    Имя Класса в Базе данных Х ресурсов: State
    Определяет одно из двух состояний таблицы: нормальное или неактивное. Если таблица не активна, то величины в ячейках не могут быть изменены с использованием команд таблицы и никакой курсор вставки не отображается, даже если фокус установлен в таблице. По умолчанию устанавливается нормальное состояние.   Имя опции в Командной строке:-titlecols
    Имя опции в Базе данных Х ресурсов: titleCols
    Имя Класса в Базе данных Х ресурсов: TitleCols
    Количество столбцов, используемое для заголовков. По умолчанию устанавливается на '0'.  
    Имя опции в Командной строке:-titlerows
    Имя опции в Базе данных Х ресурсов: titleRows
    Имя Класса в Базе данных Х ресурсов: TitleRows
    Количество строк, используемое для заголовков. По умолчанию устанавливается на 0.  
    Имя опции в Командной строке:-usecommand
    Имя опции в Базе данных Х ресурсов: useCommand
    Имя Класса в Базе данных Х ресурсов: UseCommand
    Булева величина, которое определяет, будет ли использоваться команда, заданная с помощью опции -command. Эта величина переустанавливается в нуль, если команда используется и возвращает ошибку. Значение по умолчанию - `1' (команда будет использоваться, если она задана).  
    Имя опции в Командной строке:-validate
    Имя опции в Базе данных Х ресурсов: validate
    Имя Класса в Базе данных Х ресурсов: Validate
    Булева величина, определяющая, будет ли производиться проверка корректности значения активной ячейки. По умолчанию устанавливается на "0".  
    Имя опции в Командной строке:-validatecommand или -vcmd
    Имя опции в Базе данных Х ресурсов: validateCommand
    Имя Класса в Базе данных Х ресурсов: ValidateCommand
    Определяет команду, которая выполняется для проверки корректности нового значения при редактировании активной ячейки. Эта команда должна возвращать булеву величину. Если она возвращает true, то считается, что новое значение ячейки корректно. В противном случае считается, что введенное значение некорректно и изменения величины в ячейке не произойдет. Если при выполнении этой команды возникает ошибка, она обрабатывается как ошибка фонового Tcl процесса. В команде могут использоваться %-подстановки, описанные ниже в разделе Командные подстановки.  
    Имя опции в Командной строке:-variable
    Имя опции в Базе данных Х ресурсов: variable
    Имя Класса в Базе данных Х ресурсов: Variable
    Задает имя Tcl переменной (глобального массива), для работы с С массивом, связанным с данной таблицей. Массив будет создан, если он не существует или если это простая переменная. Индексы элементов массива имеют вид row,col для соответствующих ячеек. В массиве содержится также элемент active, который содержит величину буфера активной ячейки. Tcl массив может быть разреженным массивом (не требуется, чтобы в нем содержались элементы для всех ячеек таблицы). Более того, никакой элемент массива не содержит пустой величины, и при очистке ячейки соответствующий элемент удаляется из Tcl массива.  
    Имя опции в Командной строке:-width
    Имя опции в Базе данных Х ресурсов: width
    Имя Класса в Базе данных Х ресурсов: Width
    Определяет желаемую ширину для окна в столбцах ячеек. Если она задана равной нулю или отрицательной, то ширина для окна выбирается достаточно большой, чтобы содержать все столбцы в таблице. Определенная таким образом величина будет ограничена значением опции -maxwidth, если она задана.  
    Имя опции в Командной строке:-wrap
    Имя опции в Базе данных Х ресурсов: wrap
    Имя Класса в Базе данных Х ресурсов: Wrap
    Разрешает для тэга перенос текста в ячейках на следующую строку. Значение по умолчанию - '0'.
    ОПИСАНИЕ КОМАНДЫ Команда table создает таблицу - 2-мерную сетку ячеек. Таблица может использовать переменную Tcl массива или Tcl команду для сохранения и выбора данных. Таблица имеет активную ячейку, содержимое которой может быть отредактировано (если таблица находится в нормальном состоянии). Таблица поддерживает общий стиль для ячеек, а также многочисленные тэги, которые могут использоваться, чтобы изменить стиль колонки, столбца или конкретной ячейки (см. "Теги"). Для ячеек можно установить поведение, при котором измененные ячейки меняют цвет на определенное время ("мигают"). Ячейки могут содержать не только текст, но и графические изображения или встроенные окна, как указано во фрагментахТеги и "Встроенные окна" соответственно.

    Одна или более ячеек могут быть выбраны, как указано ниже. Если таблица экспортирует свой выбор (смотри опцию -exportselection), то соблюдаются стандартные протоколы X11 для обработки выбора. (См. "Выбор").

    Не обязательно, чтобы все ячейки таблицы были видны сразу в табличном окне; описанные ниже команды могут использоваться для просмотра ячеек. Таблицы допускают "прокрутку" в обоих направлениях, используя стандартные опции -xscrollcommand и -yscrollcommand. Они также поддерживают просмотр ячеек, как указано ниже.

    Чтобы обеспечить достаточную производительность, для таблиц можно выбирать один из трех методов прорисовки, два из которых являются полностью Tk-совместимыми.

    ИНИЦИАЛИЗАЦИЯ Когда команда table загружается в интерпретатор, выполняется встроенная Tcl команда tkTableInit. Она ищет и исполняет файл с описанием стандартного поведения таблиц. Файл ищется в каталогах $tcl_pkgPath (как для конкретной, так и для произвольной версии Tktable), $tk_library и [pwd] (текущий каталог). Вы можете также определить $env(TK_TABLE_LIBRARY), который будет поставлен в начало этого списка. По умолчанию, ищется файл tkTable.tcl, но имя файла может быть изменено с помощью переменной $env(TK_TABLE_LIBRARY_FILE).

    Этот скрипт может быть заменен на ваш собственный, если вы создадите собственную процедуру tkTableInit прежде, чем библиотека будет загружена. В противном случае, вышеупомянутая переменная env(TK_TABLE_LIBRARY) будет содержать имя каталога, в котором был найден файл $env(TK_TABLE_LIBRARY_FILE).

    ИНДЕКСЫ Многие команды для таблиц используют один или более индексов как аргументы. Индекс определяет конкретную ячейку таблицы одним из следующих способов:

    число,число

    Определяет ячейку, соответствующую элементу row,col связанного Tcl массива, где -roworigin,-colorigin соответствует первой ячейке в таблице (0,0 по умолчанию). active Указывает активную ячейку, (ячейку, которая содержит курсор). Активная ячейка может задаваться командой activate. anchor Указывает якорную точку для выбора, которая устанавливается с помощью команды selection anchor. bottomright Указывает самую нижнюю - самую правую ячейку, видимую в таблице. end Указывает самую нижнюю - самую правую ячейку в таблице. origin Указывает самую верхнюю - самую левую редактируемую ячейку таблицы, не обязательно видимую на экране. topleft Указывает самую верхнюю - самую левую редактируемую ячейку, видимую в таблице. @x,y Указывает ячейку, которая покрывает в табличном окне точку с координатами x и y (в пикселях). Если никакая ячейка не покрывает эту точку, используется ближайшая к этой точке ячейка. В описаниях команд таблиц, приведенных ниже, аргументы, называющиеся index, first или last всегда обозначают индексы в одной из вышеуказанных форм.
    ТЕГИ Тэг является текстовой строкой, которая связывается с нулем или больше колонок, столбцов или ячеек в таблице. Тэги могут содержать произвольные символы, но желательно избегать использования для тегов имен, похожих на индексы. С колонками, столбцами или ячейками таблицы может быть связано любое количество тэгов. В каждой таблице есть несколько постоянных тэгов, которые могут конфигурироваться пользователем и определят атрибуты для специальных ячеек:

    active

    Это тэг активной ячейки. flash Если режим высвечивания включен, этот тэг дается всем недавно отредактированным ячейкам. sel Этот тэг дается всем выбранным ячейкам. title Этот тэг дается всем ячейкам, используемым для заголовков колонок и строк. Для этого тэга по умолчанию определено состояние "неактивно". Тэги определяют, как соответствующие ячейки отображаются на экране. По умолчанию, ячейки отображаются, как определено опциями -background, -font, и -foreground для таблицы. Тем не менее, для каждого тэга могут быть заданы индивидуальные значения этих опций с помощью команды pathName tag configure Если для ячейки задан тэг, опции тэга переопределяют стиль таблицы. В настоящее времени для тэгов поддерживаются следующие опции:

    -anchor anchor

    якорь для текста или другого объекта в пространстве ячейки; -background или -bg color цвет Фона ячейки; -font fontName шрифт для текста в ячейке; -foeground или -fg color цвет переднего плана ячейки; -justify justify выключка текста в ячейке. Возможные значения left, right, center; -image imageName графический объект, который будет отображен в ячейке вместо текста; -multiline boolean отобразить текст с символами "конец строки" в виде нескольких строк; -relief relief рельеф для ячейки; -showtext boolean показывать текст поверх графического объекта; -state state состояние ячейки, позволяет определенным ячейкам быть неактивными. Это предохраняет ячейку от редактирования с помощью вставки или удаления, но остается возможным прямое занесение информации в массив, результаты которого отображаются в таблице; -wrap boolean разрешает переносить символы в следующую строку, если ячейка недостаточно широкая. Для тэгов определен порядок приоритета. Он используется при выполнении некоторых описанных ниже функций, связанных с тэгами. Когда ячейка отображается, ее свойства определяются тэгами, которые ей присвоены. Этот порядок, включая специальные тэги, - flash, active, sel, title, celltag, rowtag, coltag, default.

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

    Графические объекты используются только для показа. Редактирование текста в таких ячейках остается возможным, и любой запрос покажет текст, хранящийся в ячейке, независимо от значения опции -showtext.

    ВСТРОЕННЫЕ ОКНА В таблице может быть произвольное количество встроенных окон (по одному на ячейку), и любой виджет (подчиняющийся обычным правилам, по которым встроенное окно должно быть потомком табличного окна или его родителя) может быть использован в качестве встроенного окна. Позиция встроенного окна на экране будет скорректирована, как только будет изменена или передвинута таблица, и оно будет отображено на экране или спрятано в зависимости от того, находится ли соответствующая ячейка в видимой области таблицы. Каждое встроенное окно занимает одну ячейку таблицы, и на него можно сослаться по индексу ячейки. Встроенные окна уничтожаются, когда уничтожается содержащая их таблица.

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

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

    -create script

    В НАСТОЯЩЕЕ ВРЕМЯ НЕ ПОДДЕРЖИВАЕТСЯ. Определяет Tcl скрипт, который может выполняться для создания заявленного окна. Если для окна, встроенного в ячейку, опция -window не задана, при необходимости отобразить ячейку на экране будет выполнен скрипт. Скрипт должен создать окно и вернуть его имя как результат выполнения скрипта. Если впоследствии окно будет удалено, перед повторным появлением ячейки на экране скрипт будет выполнен опять. -background или -bg color Цвет Фона окна. Если опция не определена, то используется цвет фона таблицы. -padx pixels Как определено в руководстве по Tk. -pady pixels Как определено в руководстве по Tk. -relief relief Рельеф, используемый для ячейки, в которой лежит окно. Если опция не определена, используется значение для таблицы. -sticky sticky "Клейкость" окна в ячейке, как определено для команды grid. -window pathName Определяет имя окна, которое будет отображено в ячейке. Окно должно существовать прежде, чем может быть использовано здесь.
    ВЫБОР Табличные выборы представляют собой данные типа СТРОКА. По умолчанию, величина выбора состоит из величин (значений) выбранных ячеек в форме Tcl списка, где каждый ряд является списком и каждый столбец является элементом списка ряда. Вы можете изменить способ, которым интерпретируется эта величина, с помощью опций -rowseparator и colseparator. Например, формат Эксела устанавливается с помощью значений
    -rowseparator "\n" и -colseparator "\t". Изменение этих опций влияет как на формирование выбора для таблицы, так и на чтение данных при вставке, гарантируя, что в таблице можно вырезать данные и вставить их в нее же. Можно изменять поведение таблицы при вставке данных с помощью редактирования библиотечной процедуры tk_tablePasteHandler. Это может потребоваться, если установлена опция -selectioncommand.
    КОМАНДНЫЕ ПОДСТАНОВКИ Команды, задающиеся с помощью различных опций таблиц, могут использовать традиционные для Tk %-ные подстановки (см. bind). Следующие %-ные подстановки выполняются при работе с таблицами:

    %c

    Для SelectionCommand это - максимальное количество столбцов в ряду в выбранной области.

    Для остальных команд - индекс столбца ячейки, вызвавшей событие.

    %c

    Удобная замена для %r,%c. %i Для SelectionCommand это - общее число ячеек в выбранной области. Для Command это - `0' для чтения (get) и `1' для записи (set).

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

    %R

    Для SelectionCommand это - количество рядов в выбранной области. Для остальных команд - ряд ячейки, породившей событие.

    %S

    Для ValidateCommand это - текущее значение в ячейке, которое будет проверяться. Для SelectionCommand это - значение по умолчанию для выбора.

    Для BrowseCommand это - индекс последней активной ячейки.

    Для Command это - пустое значение для чтения (get) и текущая значение в ячейке для записи (set).

    %S

    Для ValidateCommand это - потенциальное новое значение в ячейке, значение в которой проверяется. Для BrowseCommand это - индекс новой активной ячейки.

    %W

    Имя окна, вызвавшего событие.
    КОМАНДЫ ВИДЖЕТА Команда table создает новую команду Tcl, чье имя является именем созданного виджета. Эта команда может использоваться, чтобы выполнить различные действия с виджетом. У нее есть следующая общая форма:

    pathName option ?arg arg ...?

    где pathName - имя виджета.

    Значение опции и аргументов определяют точное назначение команды.

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

    pathName activate index

    Активизирует ячейку, заданную индексом. pathName bbox first ?last? Возвращает параметры области, объемлющей заданную ячейку (группу ячеек) в виде списка из четырех элементов: координат x и y левого верхнего угла области, ее ширины и высоты в пикселях. Область объемлет только те из указанных ячеек, которые видны на экране. Если таких ячеек нет, возвращается пустая строка. pathName border optionargs Эта команда является волшебным средством, для переноса границ ячеек при изменении их размеров. Обычно она вызывается через события с одной из следующих подопций: pathName border mark x y ?row|col? Запоминает координаты x и y и границу строки и/или столбца под этой точкой в таблице, если точка лежит на границе. Используется в связке с последующей командой border dragto. Чаще всего эта команда вызывается по нажатию кнопки "Мыши" на таблице. Если аргумент row или col не задан, команда возвращает кортеж из обоих индексов границы (пустой кортеж означает, что точка не принадлежит границе). В противном случае возвращается индекс заданной границы (строки или столбца соответственно). pathName border dragto x y Эта команда вычисляет разность между своими x и y аргументами и y и x аргументами последней команды border mark для таблицы. Затем она изменяет положение границы на вычисленную разность. Эта команда обычно вызывается по событию движения "Мыши" в таблице, чтобы произвести эффект интерактивного изменения границы. pathName cget option Возвращает текущую величину опции. Option может быть любой из опций, определенных для таблиц. pathName clear option ?first? ?last? Эта команда является удобной утилитой, чтобы удалять различные объекты таблицы. first и last представляют правильные табличные индексы. Если ни один индекс не задан, команда выполняется для всей таблицы. Возможные подопции: pathName clear cache ?first? ?last? Очищает определенный раздел кеша, если таблица использовала кеш. pathName clear sizes ?first? ?last? Отменяет заданные размеры ячеек для столбцов и колонок, входящих в заданную область. Если задан только один индекс, например, '2,0', то он задает область, состоящую из колонки '2' и столбца '0'. pathName clear tags ?first? ?last? Очищает определенную область от тэгов (все row, column и cell тэги). pathName clear all ?first? ?last? Выполняет все вышеуказанные действия в определенной области. pathName configure ?option? ?value? ?option value ...? Запрашивает или модифицируют опции таблицы. Если никакая опция не определена, возвращает список, описывающий все доступные опции для виджета (смотри Tk_ConfigureInfo для информации о формате этого списка). Если опция указана без значения, команда возвращает список, описывающий одну опцию (этот список идентичен соответствующему подсписку списка, возвращаемого, если никакая опция не задана). Если заданы одна или более пар опция-величина, то команда модифицирует данную опцию виджета, чтобы она имела данное значение (значения); в этом случае команда возвращает пустую строку. Опция может быть любой из опций, определенных для команды table. pathName curselection ?set value? Если аргументы команды не заданы, то команда возвращает отсортированные индексы выбранных ячеек. В противном случае она устанавливает во все выбранные ячейки заданное значение. Опция set не воздействует на таблицу, если у таблицы нет связанного Tcl массива или состояние таблицы неактивно. pathName curvalue?value? Если величина не задана, возвращается величина из редактируемой ячейки (с индексом active), иначе величина устанавливается в активной величине. pathName deleteoptionarg?arg? Эта команда используется, чтобы удалять различные компоненты таблицы. У нее есть различные формы, в зависимости от подопции: pathName deleteactive index?index? Удаляет текст из активной ячейки. Если дан только один индекс, команда удаляет символ после этого индекса, в противном случае удаляются символы с первого индекса по второй. index может быть числом, insert или end. pathName deletecols?switches?index?count? Удаляет count колонок, начиная с колонки с индексом index. Если count - отрицательное, удаляет колонки влево от начальной. В противном случае удаляет колонки вправо. Выбор очистится. Дополнительные ключи: -cols value Устанавливает искусственное ограничение на число столбцов в активной области. Столбцы за пределами активной области при этом изменяться не будут. По умолчанию используется величина опции -cols таблицы, то есть активная область распространяется на все столбцы. Использование опции может вызвать интересные побочные эффекты, когда опция используется в связке с другими опциями. -holddimensions Обеспечивает сохранение числа столбцов в таблице (при удалении могут появиться пустые столбцы вместо удаленных). По умолчанию число столбцов уменьшается в соответствии со значением count. -holdtags Обеспечивает сохранение тэгов, созданных с помощью команды tag, при удалении всех ячеек, для которых они были заданы. Тэги присваиваются новым ячейкам с соответствующими индексами. Также предотвращает изменение ширины таблицы, если она задана с помощью команды width. По умолчанию новые ячейки, вставшие на место удаленных, не наследуют их тегов. -keeptitles Защищает ячейки области заголовка от изменения. В противном случае они могут быть удалены подобно регулярным ячейкам. -rows value Устанавливает искусственное ограничение на число строк в активной области. Строки за пределами активной области при этом изменяться не будут. По умолчанию используется величина опции -rows таблицы, то есть активная область распространяется на все строки. Использование опции может вызвать интересные побочные эффекты, когда опция используется в связке с другими опциями. -- Означает конец ключей. pathName delete rows ?switches?index?count? Удаляет count строк таблицы, начиная со строки index (и включая ее). Если count отрицательное, то удаляются предшествующие строки. В противном случае удаляются последующие строки. Выбор очищается. Ключи - такие же, как для удаления столбца. pathName flush?first? ?last? Сохраняет табличный кеш от first до last. Если индексы не заданы, сохраняется весь кеш. pathName getfirst?last? Возвращает (в виде списка) значения из ячеек, содержащихся в прямоугольной области с левым верхним углом, заданным индексом first, и правым нижним углом, определяемым индексом last (если задан). pathName height?row? ?value rowvalue ...? Если никакая строка не задана, возвращает список, описывающий все строки, для которых высота установлена. Если колонка задана без величины, возвращает высоту этой колонки в символах (положительное число) или пикселях (отрицательное число). Если одна или более пар строка-величина определены, тогда, устанавливает высоту соответствующих строк в строках символов (положительное число) или пикселях (отрицательный номер). Если задано значение высоты "default", то высота строки определяется значением опции -rowheight. pathName icursor?arg? Если команда задана без аргументов, то она возвращает позицию курсора вставки в активной ячейке. Если команда задана с одним аргументом, то она устанавливает курсор в этой точке в строке. 0 - перед первым символом. Допустимые индексы: insert для текущего положения курсора и end для конца текста. pathName index index?row|col? Возвращает индекс ячейки, которая соответствует указанному индексу, в форме row,col. Если задана опция row или col, то команда возвращает только индекс строки или столбца соответственно. pathName insertoptionarg arg Эта команда используется, чтобы вставлять различные объекты (значения, колонки, столбцы и т.п.) в таблицу. У нее есть различные формы в зависимости от подопции: pathName insert active index value value является текстовой строкой, которая вставляется в активную ячейку, начиная с позиции index. Курсор затем позиционируется после встроенного текста. index может быть числом, insert или end. pathName insert cols?switches? index ?count? Вставляет count столбцов, начиная с индекса col. Если count является отрицательным числом, они вставляются перед столбцом с индексом col. В противном случае они вставляются после столбца с индексом col. Выбор очищается. Ключи - те же, как при удаления столбца. pathName insert rows ?switches? index ?count? Вставляет count строк, начиная с индекса col. Если count является отрицательным числом, они вставляются перед строкой с индексом col. В противном случае они вставляются после строки с индексом col. Выбор очистится. Ключи - те же, как для удаления строки. pathName reread Перечитывает старое содержимое ячейки снова в буфер редактирования. Полезно для обработки событий, когда <Escape> нажимается, чтобы прервать редактирование (стандартное поведение). pathName scan option args Эта команда используется, чтобы осуществить "прокрутку" таблицы. У нее есть две формы в зависимости от опций: pathName scan mark x y Запоминает текущие координаты x и y и вид таблицы; используется в связке с последующей scan dragto командой. Обычно эта команда вызывается по нажатию на кнопку "Мыши". Возвращает пустую строку. pathName scan dragto x y Эта команда вычисляет разность между текущими координатами y и x и координатами x и y, запомненными в последней команде scan mark для данного виджета. Затем она "прокручивает" таблицу на 5-кратную разность координат. Эта команда обычно вызывается при движении "Мыши" на таблице и используется для ускоренного просмотра таблицы. Возвращает пустую строку. pathName seeindex "Прокручивает" таблицу так, чтобы ячейка, заданная индексом, оказалась первой ячейкой с левого верхнего края таблицы (исключая строки и столбцы заголовков), если ячейка к настоящему времени не видна на экране. Фактическая ячейка может не оказаться самой первой, если за ней в таблице недостаточно ячеек, чтобы заполнить экран. pathName selectionoptionarg Эта команда используется, чтобы управлять выбором в таблице. У нее есть различные формы, в зависимости от опций: pathName selectionanchorinde Устанавливает якорь выбора в ячейке, заданной индексом. Якорь выбора является концом выбора, который фиксируется, пока второй конец области выбора передвигается с помощью "Мыши". Индекс anchor может использоваться для ссылок на соответствующую ячейку. pathName selection clear first ?last? Снимает выбор с выбранных ячеек от first до last (включительно). Состояние выбора для ячеек за пределами этой области не изменяется. Если first равно all, команда удаляет выбор из всех ячеек. pathName selection includesindex Возвращает `1', если ячейка, указанная индексом, выбрана, и `0' - если нет. pathName selection set first ?last? Выбирает все ячейки в области от first до last включительно, не влияя на состояние выбора ячеек за пределами этой области. pathName set?row|col? index?value? ?index value ...? Для каждой пары index value устанавливает значение value в ячейке, определенной индексом. Проверка корректности значений при этом не производится. Если списку пар индекс-величина предшествует row или col, величина value рассматривается как Tcl список, и значения из списка устанавливаются в последовательных ячейках строки или колонки соответственно. Например, команда set row 2,3 {2,3 2,4 2,5} Установит значения в 3 ячейки, от 2,3 до 2,5. pathName tagoption?arg arg ...? Эта команда используется, чтобы управлять тэгами. Точное поведение команды зависит от значения опции и аргументов. Только опция cget требует использования реально существующих тэгов. В настоящее время поддерживаются следующие формы команды: pathName tag cell tagName?index ... ? Если команда задана без аргументов, то она распечатывает список ячеек, которые используют тэг. В противном случае она устанавливает тэг заданным ячейкам. Если тэг пустой ({}), ячейкам восстанавливается тэг по умолчанию. Тэги, добавленные с помощью опций -*tagcommand, здесь не обрабатываются. pathName tag cget tagNameoption Эта команда возвращает текущую величину опции option для тэга tagName. option может быть любой из опций, определенных для команды tag configure для таблиц. pathName tag col tagName?col ... ? Если команда задана без аргументов, то она распечатывает список колонок, которые используют данный тэг. В противном случае устанавливает тэг заданным столбцам. Если тэг пустой ({}), столбцам восстанавливается тэг по умолчанию. Тэги, добавленные с помощью опции -coltagcommand, здесь не обрабатываются. pathName tag configure tagName ?option? ?value? ?option value ...? Эта команда подобна команде configure для таблиц, за исключением того, что она изменяет опции, связыванные с тэгом tagName вместо модификации опций для всей таблицы. Если никакая опция не задана, команда возвращает список всех доступных опций для tag_Name (смотри Tk_ConfigureInfo для информации о формате этого списка). Если опция указана без величины, возвращается подсписок указанного списка, соответствующий указанной опции. Если указана одна или более пар опция- величина, то команда модифицирует данную опцию (опции) для указанного тэга; в этом случае команда возвращает пустую строку. См. "ТЭГИ". pathName tag delete tagName Удаляет тэг. Если тэг не существует, ошибки не возникает. pathName tag exists tagName Возвращает `1', если указанный тэг существует, и '0' - в противном случае. pathName tag includes tagNameindex Возвращает `1', если ячейка с данным индексом имеет указанный тэг, и '0' - в противном случае. pathName tag names ?pattern? Если никакой образец не задан, показывает имена всех определенных тэгов в таблице. В противном случае образец используется в качестве шаблона, и показываются только тэги, удовлетворяющие этому шаблону. pathName tag row tagName?row ...? Если команда задана без аргументов, то она распечатывает список строк, которые используют данный тэг. В противном случае она устанавливает данный тэг указанным строкам. Если тэг пустой ({}), строкам восстанавливается тэг по умолчанию. Тэги, добавленные с помощью опции -rowtagcommand, не обрабатываются здесь. pathName validateindex Явно проверяет корректность значения в ячейке, определенной индексом, с помощью команды, заданной опцией -validatecommand. Возвращает '0' или `1' в зависимости от результатов проверки. pathName width?col? ?value col value ...? Если никакой столбец не задан, возвращает список, описывающий все столбцы, для которых установлена ширина. Если столбец указан без указания ширины, команда возвращает ширину соответствующего столбца в символах (положительное число) или пикселях (отрицательное число). Если заданы одна или более пар колонка-величина, тогда команда устанавливает каждому перечисленному столбцу соответствующую ширину в символах (положительное число) или пикселях (отрицательное число). Если величина совпадает с шириной, задаваемой по умолчанию, колонка в дальнейшем будет использовать ширину, определенную с помощью опции -colwidth. pathName window option ?arg arg ...? Эта команда используется, чтобы управлять встроенными окнами. Точное поведение команды зависит от значения опции и аргументов. В настоящее время поддерживаются следующие формы команды: pathName window cget index option Эта команда возвращает текущую величину опции option для окна в ячейке с данным индексом. option может иметь любое из значений, допустимых для команды window configure. pathName window configureindex ?option? ?value? ?option value ...? Эта команда подобна команде configure для таблицы, за исключением того, что она изменяет опции, связанные с встроенным окном с данным индексом, а не опции таблицы в целом. Если опция указана без величины, возвращается подсписок указанного списка, соответствующий указанной опции. Если указана одна или более пар опция-величина, то команда модифицирует данную опцию (опции) для указанного окна; в этом случае команда возвращает пустую строку. См. "Встроенные окна". pathName window deleteindex ?index ...? Удаляет встроенное окно из таблицы. Соответствующее окно также будет удалено. pathName window move indexFrom indexTo Перемещает встроенное окно из одной ячейки в другую. Если в целевой ячейке уже существует другое окно, оно будет удалено. pathName window names ?pattern? Если никакой шаблон не задан, команда показывает все ячейки, в которых есть встроенные окна. В противном случае показывает только те ячейки, в которых есть встроенные окна с именами, удовлетворяющими шаблону. pathName xview args Эта команда используется для запросов о горизонтальной позиции таблицы в окне и для изменения горизонтальной позиции таблицы в окне. Команда может использоваться в одной из следующих форм: pathName xview
      Возвращает список, содержащий два элемента. Каждый из них является действительным числом из диапазона '0' - `1'. Они указывают соответственно левую и правую границы видимой области. Например, если первый элемент - ".2" а второй элемент - ".6", то 20% табличного текста выходит за пределы экрана слева, средние 40% текста видны в окне, и 40% текста выходит за пределы экрана вправо. Эти величины используются для конфигурации полос прокрутки с помощью команды, заданной опцией -xscrollcommand. pathName xview index
      "Прокручивает" таблицу так, чтобы столбец с данным индексом отображался на левом крае окна. pathName xview moveto fraction
      "Прокручивает" таблицу так, чтобы доля общей ширины табличного текста, выходящая за пределы экрана влево, равнялась fraction. fraction должно быть дробью между '0' и `1'. pathName xview scroll numberwhat Эта команда "прокручивает" таблицу влево или вправо на заданное расстояние. number должно быть целым числом. what должно быть units или pages или сокращением одного из их. Если what равно units, таблица сдвигается на number символов (символ равен ширине символа 0); если what равно pages, таблица сдвигается на соответствующее число экранов. Если number является отрицательным числом, тогда более левые символы становятся видимыми; если number - положительное число, тогда более правые символы становятся видимыми. pathName yviewargs Эта команда используется для запросов о вертикальной позиции таблицы в окне и для изменения вертикальной позиции таблицы в окне. Команда может использоваться в одной из следующих форм: pathName xview Возвращает список, содержащий два элемента. Каждый из них является действительным числом из диапазона '0' - `1'. Они указывают соответственно верхнюю и нижнюю границы видимой области (например, `.5' означает середину таблицы) Эти величины используются для конфигурации полос прокрутки с помощью команды, заданной опцией
    -yscrollcommand.
    pathName yview index "Прокручивает" таблицу так, чтобы строка с данным индексом отображалась на верхнем крае окна. pathName yview moveto fraction "Прокручивает" таблицу так, чтобы доля общей высоты табличного текста, выходящая за пределы экрана вверх, равнялась fraction. fraction должно быть дробью между '0' и `1'. pathName yview scroll number what Эта команда "прокручивает" таблицу вверх или вниз на заданное расстояние. number должно быть целым числом. what должно быть units или pages или сокращением одного из их. Если what равно units, таблица сдвигается на number строк текста; если what равно pages, таблица сдвигается на соответствующее число экранов. Если number является отрицательным числом, тогда более ранние символы становятся видимыми; если number - положительное число, тогда более поздние символы становятся видимыми.
    СТАНДАРТНОЕ ПОВЕДЕНИЕ
      Вновь созданная таблица обладает следующим поведением.

    [1] Нажатие левой кнопки "Мыши" в ячейке активизирует эту ячейку. Нажатие кнопки "Мыши" в уже активной ячейке перемещает курсор вставки на ближайший символ.

    [2] Перемещение курсора "Мыши", при нажатой левой кнопке, позволяет выделить область таблицы. Выход курсора из таблицы вниз, при нажатой левой кнопке "Мыши", обеспечивает прокрутку таблицы одновременно с выделением ячеек.

    [3] Перемещение курсора "Мыши", при нажатой средней кнопке "Мыши", обеспечивает прокрутку таблицы без выделения.

    [4] Клавиша Home возвращает к началу таблицы.

    [5] Клавиша End перемещает в конец таблицы.

    [6] Сочетание клавиш Control-Home перемещает в начало таблицы и активизирует первую ячейку.

    [7] Сочетание клавиш Control-End перемещает в конец таблицы и активизирует последнюю ячейку.

    [8] Сочетание клавиш Shift-Control-Home расширяет выделенную область таблицы до ее начала.

    [9] Сочетание клавиш Shift-Control-End расширяет выделенную область таблицы до ее конца.

    [10] Клавиши с изображениями стрелок позволяют выбрать соседнюю ячейку в соответствующем направлении.

    [11] Сочетание клавиш Shift-<arrow> расширяет выбранную область в направлении, указываемом стрелкой.

    [12] Сочетание клавиш Control-leftarrow и Control-rightarrow перемещают курсор вставки внутри ячейки.

    [13] Сочетание клавиш Control-slash выбирает все ячейки.

    [14] Сочетание клавиш Control-backslash clears снимает выбор со всех ячеек.

    [15] Клавиша Backspace удаляет символ перед курсором вставки в активной ячейке.

    [16] Клавиша Delete удаляет символ после курсора вставки в активной ячейке.

    [17] Клавиша Escape перечитывает содержимое активной ячейки из заданного источника данных, отменяя любые изменения, выполненные в ячейке.

    [18] Сочетание клавиш Control-a перемещает курсор вставки в начало активной ячейки.

    [19] Сочетание клавиш Control-e перемещает курсор вставки в конец активной ячейки.

    [20] Control-minus и Control-equals уменьшает и увеличивает ширину столбца, содержащего активную ячейку.

    [21] Перемещение курсора "Мыши" с нажатой правой кнопкой когда курсор находится на границе ячейки вызовет изменение размеров строки и/или столбца, (при соответствующей величине опция -resizeborders).

    Поведение таблицы может незначительно отличаться от описанного выше в зависимости от значения опции -selectionmode.

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

    Поведение таблиц может изменяться путем определения новых событий для конкретной таблицы или путем переопределения событий для всего класса. Описание стандартных событий приведено в файле tkTable.tcl.


    ПРИМЕР НАПИСАНИЯ ПРОГРАММЫ, РЕАЛИЗУЮЩУЮ ЭКРАННУЮ ФОРМУ ВВОДА ЛИЧНОЙ КАРТОЧКИ

    В качестве примера рассмотрим программу, реализующую экранную форму ввода личной карточки.

    Текст программы:
     

    global var1 var2 var3 var4 var5
    set var1 ""
    set var2 ""
    set var3 ""
    set var4 ""
    set var5 ""
    proc showValue {} { global var1 var2 var3 var4 var5
    puts "Переменная var1 = $var1"
    puts "Переменная var2 = $var2"
    puts "Переменная var3 = $var3"
    puts "Переменная var4 = $var4"
    puts "Переменная var5 = $var5"

    }

    wm title . "Form"
    label .msg -font fixed -justify left -text "Test window."
    pack .msg -side top
    frame .buttons
    pack .buttons -side bottom -fill x -pady 2m
    button .buttons.dismiss -text "Вход" -command "exit"
    button .buttons.code -text "Значения" -command "showValue"
    pack .buttons.dismiss .buttons.code -side left -expand 1
    foreach i {var1 var2 var3 var4 var5} { frame .$i -bd 2
    entry .$i.entry -relief sunken -width 40 -textvariable $i
    label .$i.label
    pack .$i.entry -side right
    pack .$i.label -side left
    }
    .var1.label config -text Name:
    .var2.label config -text Address:
    .var5.label config -text Phone:
    pack .msg .var1 .var2 .var3 .var4 .var5 -side top -fill x
    focus .var1.entry

    В этом примере формы ввода личной карточки значения введенных полей записываются в переменные var1 var2 var3 var4 var5.

    Теперь рассмотрим текст по строкам

    В начале программы объявляем глобальные переменные и присваиваем им начальные значения:

    global var1 var2 var3 var4 var5
    set var1 ""
    set var2 ""
    set var3 ""
    set var4 ""
    set var5 ""
    Затем описываем процедуру, которая будет вызываться при нажатии кнопки ⌠Значения⌠ и выдавать на стандартное устройство вывода значения наших переменных:

    proc showValue {} {

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

    global var1 var2 var3 var4 var5

    Затем распечатываем их
     

    puts "Переменная var1 = $var1"
    puts "Переменная var2 = $var2"
    puts "Переменная var3 = $var3"
    puts "Переменная var4 = $var4"
    puts "Переменная var5 = $var5"
    }
    Установим заголовок главного окна на строку ⌠Form⌠, используя команду управления менеджером окон WM
      wm title . "Form" Создадим подпись с именем .msg. Имя подписи состоит из ⌠точки⌠ и имени, где ⌠точка⌠ - имя родительского объекта (главное окно), имя - имя создаваемого объекта.

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

    label .msg -font fixed -justify left -text "Test window." Используя команду pack, мы говорим интерпретатору, что объект с именем (в данном случае это .msg) нужно расположить в верхней части родительского (главного) окна (объекта)
      pack .msg -side top


    Командой frame создаем область для расположения в ней кнопок управления с именем .buttons. Как видно из имени, эта область принадлежит главному окну
     

    frame .buttons Расположение области .buttons задаем в нижней части формы, причем эта область будет занимать по ширине все пространство родительского окна. Опция ⌠-pady 2m⌠ устанавливает отступ объектов по вертикали, которые будут располагаться во внутренней части .buttons, равной 2 мм.
      pack .buttons -side bottom -fill x -pady 2m Теперь создадим и расположим в созданной области кнопки управления
      button .buttons.dismiss -text "Вход" -command "exit"
    button .buttons.code -text "Значения" -command "showValue"
    pack .buttons.dismiss .buttons.code -side left -expand 1
    Имена строятся по тому же принципу, ⌠.buttons.⌠ - родительское окно, ⌠dismiss⌠ - имя объекта.

    При нажатии кнопки .buttons.dismiss мы предписываем выполнить команду ⌠exit⌠, что приведет к завершения программы. При нажатии кнопки .buttons.code мы предписываем выполнить процедуру с именем ⌠showValue⌠, которая будет описана ниже.

    Теперь создадим 5 полей ввода для переменных var1, var2, var3, var4 и var5. Каждое поле ввода состоит из области (frame), в которой находится поле ввода и подпись. При создании поля ввода ( команда ⌠entry⌠ ) используется опция ⌠relief⌠ для придания рельефа области ввода, а также задается размер в символах.

    foreach i { var1 var2 var3 var4 var5} {

    frame .$i -bd 2
    entry .$i.entry -relief sunken -width 40
    entry .$i.entry -relief sunken -width 40 -textvariable $i


    Опция -textvariable указывает, что значение поля ввода берется и будет записано в переменной с именем ⌠$i⌠.
     

    label .$i.label
    pack .$i.entry -side right
    pack .$i.label -side left
    }


    Здесь .$i.label : ⌠.$i.⌠ - родительский объект, label - имя объекта. Имя родительского объекта в цикле будет находиться из подстановки значения $i, и будет принимать значения:

    . var1.---, . var2.---, . var3.---, . var4.--- и . var5.---.

    Подписи располагаются слева, а поля ввода справа.

    Подписи для полей ввода определяются с помощью команды конфигурирования ⌠config⌠.

    .var1.label config -text Name:
    .var2.label config -text Address:
    .var5.label config -text Phone:

    Расположим созданные поля ввода в главном окне в следующем порядке.

    pack .msg .var1 .var2 .var3 .var4 .var5 -side top -fill x

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

    focus .var1.entry

    Далее определим процедуру showValue, которая в нашем случае распечатывает значения, которые были набраны оператором в полях ввода.
     

    proc showValue {} {
    foreach i {f1 f2 f3 f4 f5} { puts "Field $i : [.$i.entry get]"
    }
    }
    Команда puts ⌠Field $i : [.$i.entry get]⌠ печатает строку, в которой осуществлена подстановка $i на f1, f2, f3, f4 и f5, а [.$i.entry get] на значения соответствующих полей ввода .f1.entry, .f2.entry, .f3.entry, .f4.entry и .f5.entry.
     
    Все права защищены 1992-1999 DataX/FLORIN, Inc.