Версия для печати
Архив документации на 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, или пока на стандартный вход не поступит
символ конца файла.
Для запуска интерпретатора
необходимо в ответ на приглашение операционной системы подать команду
tclsh ?fileNamearg
arg ┘?
Если никаких аргументов указано
не было, то ⌠Интерпретатор■ запустится в интерактивном режиме, изображая
на дисплее приглашение для ввода команд в виде знака процента ▒%▓. В ответ
на приглашение следует ввести команду Tcl и нажать клавишу Enter.
Затем ввести следующую команду и снова нажать Enter.
Если в домашнем каталоге
пользователя существует файл .tclshrc, то tclsh обработает
этот файл как скрипт Tcl до считывания первой команды со стандартного входа.
Когда tclsh запускается
с аргументами, то первый аргумент fileName является именем файла
со скриптом, а все последующие необязательные аргументы передаются скрипту
в качестве переменных. Вместо того, чтобы считывать команды со стандартного
входа, ⌠Интерпретатор■ будет работать в пакетном режиме: считывать их из
указанного файла и завершит свою работу по достижении конца файла. В этом
случае автоматической обработки файла .tclshrc не делается, но если это
необходимо, то можно сослаться на него изнутри файла скрипта.
Tclsh задает следующие переменные
Tcl:
Argc ≈содержит
счетчик количества аргументов arg (если ни одного, то 0), исключая
имя файла со скриптом.
Argv ≈ содержит
список Tcl, элементами которого являются аргументы arg, в порядке
их следования, или нулевую строку, если нет ни одного аргумента.
argv0 ≈ содержит
fileName,
если он был задан. В обратном случае содержит имя, при помощи которого
был вызван tclsh.
tcl_interactive≈ содержит
1, если tclsh работает в интерактивном режиме (не было задано fileName
и стандартный вход есть терминальное устройство). В противном случае содержит
0.
ИНТЕРПРЕТАТОР
wish
ИНТЕРПРЕТАТОР wish представляет
собой простую программу с двумя рабочими окнами, главным и выходным. ИНТЕРПРЕТАТОР
может работать в интерактивном или пакетном режиме. В первом случае он
считывает команды Tcl со стандартного входа: пользователь вводит команды
с клавиатуры в главном окне, wish обрабатывает их и выводит результат или
сообщение об ошибке в выходном окне.
Во втором случае источником
команд для обработки служит указанный дисковый файл. В обоих режимах ⌠Интерпретатор■
будет работать до тех пор, пока не будут удалены все окна приложения, или
пока на стандартный вход не поступит символ конца файла.
Для запуска интерпретатора
необходимо в ответ на приглашение операционной системы подать команду
wish ?fileName
arg arg ┘?
Если никаких аргументов указано
не было, или если первый аргумент начинается с символа ▒-▓, то ⌠Интерпретатор■
запустится в интерактивном режиме, изображая на дисплее приглашение для
ввода команд в виде знака процента ▒%▓. В ответ на приглашение следует
ввести команду Tcl и нажать клавишу Enter. Затем ввести следующую команду
и снова нажать Enter.
Если в домашнем каталоге
пользователя существует файл .wishrc, то wish обработает
этот файл как скрипт Tcl до считывания первой команды со стандартного входа.
Когда wish запускается
с первым аргументом fileName, то аргумент считается именем файла
со скриптом. ⌠Интерпретатор■ обработает файл fileName (создающий
преимущественно интерфейс пользователя) в пакетном режиме и затем будет
откликаться на события до тех пор, пока все окна не будут удалены. Команды
со стандартного входа считываться не будут. В этом случае автоматической
обработки файла .wishrc не делается, но если это необходимо, то файл скрипта
может сослаться на него сам.
Wish ≈ автоматически обработает
все необязательные аргументы arg командной строки из нижеприведенного
списка.
-colormap new ≈ указывает
на то, что окно должно иметь новую собственную цветовую схему (colormap),
а не использовать цветовую схему, заданную по умолчанию.
-display display ≈
задает дисплей (и экран) для отображения окна.
-geometry geometry ≈
задает начальную геометрию для использования в окне. Если этот параметр
задан, то его значение сохраняется в глобальной переменной geometry интерпретатора
Tcl, работающего с приложением.
-name name ≈ задает
использование name в качестве заголовка окна и имени интерпретатора
для использования в командах send.
-sync ≈
задает синхронное исполнение команд Х сервера, так что все ошибки докладываются
немедленно. Это приведет к гораздо более медленному исполнению,
но такой режим полезен при отладке.
-use id ≈дает
директиву встроить главное окно приложения в окно с идентификатором
id,
а не создавать его как отдельное самостоятельное окно верхнего уровня.
Идентификатор id необходимо описать таким же образом, как и значения
параметра -use для примитивов верхнего уровня (т.е., в форме, возвращаемой
командой winfo id).
-visual visual ≈
описывает используемый для окна visual. Этот параметр может иметь
любую форму, поддерживаемую процедурой Tk_GetVisual.
-- ≈дает директиву
передать все остальные параметры в переменную скрипта argv без интерпретации.
Это обеспечивает способ передачи аргументов в скрипт вместо интерпретации
их wish.
Любые аргументы командной строки
не из этого списка передаются скрипту с помощью переменных argc и argv.
Имя приложения (используемое
для таких целей, как команды send) берется из параметра -name, если он
был задан. В противном случае оно берется из fileName, если оно
было указано, или из командной строки, вызвавшей wish. В последних двух
случаях, если имя содержит символ ▒/▓ (слеш), то только символы после последнего
слеша используются в качестве имени приложения.
Класс приложения (используемый
для таких целей, как описание параметров при помощи свойства RESOURCE_MANAGER
или файла .Xdefaults) совпадает с его именем за исключением первой буквы,
которая делается заглавной.
Wish ≈ задает следующие переменные
Tcl:
argc, argv0, tcl_interactive
Эти три переменные выполняют
для wish точно такую же роль, какую выполняют одноименные переменные
для интерпретатора tclsh.
Argv ≈содержит
список Tcl, элементами которого являются аргументы arg, которые
следуют в командной строке за параметром -- или не входят в приведенный
выше список различаемых параметров wish, в порядке их следования, или содержит
нулевую строку, если нет ни одного аргумента.
geometry
Если параметр -geometry
был задан, то wish копирует его значение в эту переменную. Если
после обработки fileName эта переменная еще существует, то wish
использует значение этой переменной в команде wm geometry для задания
геометрии главного окна.
ДОПОЛНИТЕЛЬНЫЕ
ВОЗМОЖНОСТИ
Интерпретаторы можно запускать
не только в режиме командной строки, но также и из скрипта. Также можно
изменить вид приглашения (символ ▒%▓).
Если создать файл скрипта
(этот и следующий примеры даны для интерпретатора tclsh, для wish
надо заменить в строках имя tclsh на wish) с первой строкой вида
и пометить файл скрипта, как
исполняемый, то будет можно запускать ⌠Интерпретатор■ прямо из оболочки
Unix. В этом случае предполагается, что ⌠Интерпретатор■ (tclsh, wish)
был установлен в стандартный каталог usr/local/bin; если он был установлен
в какое-нибудь иное место, то надо будет откорректировать путь в названной
выше строке. При этом эта строка должна удовлетворять возможным требованиями
операционной системы Unix на длину строк, начинающихся с #! (не более 30
символов).
Еще удобнее будет начинать
файлы со скриптами следующими тремя строками:
#!/bin/sh
# the next line restarts
using tclsh\
exec tclsh "$0" "$@"
Этот второй способ имеет три
преимущества перед предыдущим способом:
-
местонахождение исполняемого
файла интерпретатора не нужно прописывать в скрипте: исполняемый файл может
находиться в любом месте в пределах пути поиска оболочки пользователя;
-
нет необходимости учитывать
ограничение на длину строк;
-
этот способ будет работать даже
тогда, когда файл tclsh или wish сам является скриптом оболочки (иногда
так поступают для того, чтобы иметь возможность работать с несколькими
архитектурами или операционными системами: скрипт tclsh (wish) выберет
для запуска один из нескольких исполняемых файлов).
Эти три строчки позволяют обрабатывать
скрипт и оболочке 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 предоставляет возможность
автоматической загрузки пользовательских библиотек Tcl. Также возможна
автоматическая загрузка по мере надобности динамических библиотек DLL,
если ОС поддерживает такую загрузку.
Типы данных 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"
передаст команде set
два аргумента:
a и ▒This is a single argument▓. Выполнение
подстановок команд, подстановок переменных и подстановок с обратным слешем
внутри двойных кавычек будет сохранено. Если первый символ в поле команды
не двойные кавычки, тогда при анализе этого поля двойные кавычки не имеют
специальной интерпретации.
Группирование аргументов
с помощью фигурных скобок
Для группирования аргументов
можно также использовать фигурные скобки. Их действие похоже на двойные
кавычки, за исключением двух отличий. Во-первых, они позволяют вложение,
поэтому их проще использовать для таких усложненных аргументов, как вложенные
командные строки Tcl. Во-вторых, нижеописанные подстановки для команд,
переменных и обратных слешей внутри фигурных скобок не выполняются. Поэтому
фигурные скобки можно использовать для избежания ненужных подстановок.
Если поле аргумента начинается с открывающей фигурной скобки, то этот аргумент
заканчивается соответствующей ей закрывающей фигурной скобкой. Tcl отбросит
наружную пару фигурных скобок и передаст команде информацию внутри скобок
без какой-либо последующей модификации. Например, в команде
команда set
получит два аргумента:
a
и ▒xyz a {b c d}▓.
Когда действуют двойные кавычки
или фигурные скобки, парная закрывающая скобка или кавычки не должны обязательно
быть на той же строке, что и ее открывающая. В этом случае символ новой
строки будет включен в поле аргумента вместе со всеми остальными символами
до закрывающей скобки или кавычек. Например, команда eval
использует один аргумент, представляющий собой строку команды: eval
вызывает ИНТЕРПРЕТАТОР Tcl для выполнения командной строки. Команда
eval {
set a 22
set b 33
}
присвоит значение ▒22▓
переменной a и значение ▒33▓ ≈ переменной ▒b▓.
Если первый символ поля команды
≈ не открывающая фигурная скобка, то ни открывающая, ни закрывающая фигурные
скобки в этом поле не будут интерпретироваться специальным образом (кроме
случая подстановки переменной, об этом рассказано ниже).
Подстановка команд
со скобками
При появлении в поле команды
открывающей квадратной скобки выполняется подстановка команды. Все символы
внутри скобок считаются командой, и она исполняется немедленно. Затем результат
этого исполнения подставляется вместо текста в скобках. Например, рассмотрим
команду
Когда у команды set
задан только один аргумент, тогда это есть имя переменной, и set
возвращает значение этой переменной. В этом случае, если переменная b
имеет значение ▒foo▓, то предыдущая команда эквивалентна команде
Квадратные скобки можно использовать
более сложными способами. Например, если переменная b имеет значение
▒foo▓, а переменная c имеет значение ▒gorp▓, то команда
эквивалентна команде
Команда в квадратных скобках
может содержать несколько команд, разделенных обычным образом ≈ строками
или точками с запятой. В этом случае для подстановки используется значение
последней команды. Например, последовательность команд
set a x[set b 22
expr $b+2]x
эквивалентна команде
Если поле заключено в фигурные
скобки, то квадратные скобки и символы между ними не интерпретируются специальным
образом, а передаются в аргумент без изменения.
Подстановка переменных
с $
Символ доллара ▒$▓ можно
использовать в качестве краткой формы для подстановки переменных. Если
у аргумента, не заключенного в фигурные скобки, имеется символ ▒$▓, то
выполняется подстановка переменной. Символы после ▒$▓ вплоть до первого
символа, не являющегося цифрой, буквой или подчеркиванием, считаются именем
переменной, и строковое значение этой переменной подставляется вместо ее
имени. Например, если переменная foo имеет значение ▒test▓,
то команда
эквивалентна команде
Существует две специальные формы
для подстановки переменных. Если следующим после имени переменной является
открывающая скобка, то переменная считается именем массива, и все символы
между открывающей скобкой и следующей закрывающей скобкой считаются индексом
внутри этого массива. Команды и переменные, используемые в качестве индекса,
обрабатывается перед операцией извлечения элемента массива. Например, если
переменная
x есть массив и один его элемент по имени first
имеет значение ▒87▓, а второй по имени 14 ≈ значение ▒more▓,
то команда
эквивалентна команде
Если переменная index
имеет значение ▒14▓, то команда
эквивалентна команде
Более подробно о массивах
.
Вторая специальная форма
для переменных имеет место тогда, когда после символа доллара следует открывающая
фигурная скобка. В этом случае имя переменной состоит из всех символов,
заключенных между фигурными скобками. Ссылки на массив в таком случае невозможны:
предполагается, что такое имя есть имя скалярной переменной. Например,
если переменная
foo имеет значение ▒test▓, то команда
эквивалентна команде
В аргументе, заключенном в фигурные
скобки, не выполняется подстановка переменных: символ доллара и имя переменной
передаются аргументу без изменения.
Аббревиатура с символом доллара
есть просто сокращенная форма: ▒$a▓ полностью эквивалентна ▒[set
a]▓ и используется только для удобного сокращения количества печатаемых
символов.
Разделение команд
точкой с запятой
Обычно каждая команда занимает
одну строчку (команда заканчивается символом новой строки). Символ точки
с запятой также считается разделителем команд: можно поместить несколько
команд в одной строке, разделив их точками с запятой. Точки с запятой не
считаются разделителями команд, если они находятся внутри фигурных скобок
или двойных кавычек.
Подстановки с обратным
слешем
Обратный слеш можно использовать
для ввода непечатаемых символов в поля команд и для вставки специальных
символов (например, фигурных скобок или двойных кавычек) в поля без описанной
выше специальной интерпретации этих символов. Ниже перечислены различаемые
интерпретатором Tcl последовательности с обратным слешем. В каждом случае
последовательность с обратным слешем замещается указанным символом:
\b |
≈ |
сдвиг на одну позицию
влево (0х8); |
\f |
≈ |
прогон листа (0хс); |
\n |
≈ |
новая строка, newline(0ха); |
\r |
≈ |
возврат каретки (0хd); |
\t |
≈ |
табуляция (0х9); |
\v |
|
вертикальная табуляция (0xb); |
\{ |
≈ |
открывающая фигурная скобка
(▒{▒); |
\} |
≈ |
закрывающая фигурная скобка
(▒}▓); |
\[ |
≈ |
открывающая квадратная скобка
(▒[▒); |
\] |
≈ |
закрывающая квадратная скобка
(▒]▓); |
\$ |
≈ |
символ доллара (▒$▓); |
\sp |
≈ |
пробел (▒ ▒), аргумент не
прерывается; |
\; |
≈ |
точка с запятой, аргумент
не прерывается; |
\" |
≈ |
двойные кавычки; |
\nl |
≈ |
ничего: обратный слеш с
последующей новой строкой соединяет две строки в одну. Эта подстановка
уникальна тем, что она действует даже внутри фигурных скобок; |
\<newline>пробел |
≈ |
одиночный пробел заменяет
обратный слеш, символ новой строки и все пробелы и табуляции после этого
символа новой строки. Данная последовательность уникальна в том смысле,
что она замещается в отдельном суб-проходе перед тем, как начинается непосредственно
анализ команды. Поэтому эта последовательность будет замещена, даже если
она стоит между фигурными скобками и результирующий пробел будет интерпретироваться
как разделитель слов, кроме того случая, когда он стоит между фигурными
скобками или кавычками; |
\\ |
≈ |
обратный слеш (▒\▓); |
\ddd |
≈ |
цифры ddd (одна, две или
все три) дают восьмеричное значение символа. Нулевой символ нельзя вставить
в поле команды: если ddd есть ноль, то последовательность с обратным слешем
игнорируется (т.е., преобразовывается в нулевую строку). |
Пример:
set a \{x\[\\0yz\141
второй аргумент команды setбудет
▒{x[\0yza▓.
Если следом за обратным слешем
стоит какой-либо иной символ, кроме перечисленных выше, то обратный слеш
передается в поле аргумента без специальной обработки, и сканер строки
Tcl продолжает нормальную работу со следующим символом.
Например, в команде
set \*a \\\{foo
первый аргумент для set
будет ▒\*a▓, а второй ≈ ▒\{foo▓.
Если аргумент заключен в фигурные
скобки, то последовательности с обратным слешем внутри аргумента будут
распознаны, но подстановки не будут выполнены (за исключением пары обратный
слеш ≈ новая строка): последовательности с обратным слешем передаются в
аргумент как есть, без какой-либо специальной интерпретации символов в
последовательностях. В частности, в такой ситуации фигурные скобки не означают
поиска соответствующей парной скобки, заканчивающей аргумент. Например,
в команде
второй аргумент команды set
будет ▒\{abc▓.
Данный механизм обратного
слеша недостаточен для создания аргумента абсолютно любой структуры; он
только обеспечивает наиболее общие случаи. Для создания особенно сложного
аргумента, возможно, самым простым вариантом будет использование команду
format
совместно с подстановкой команды.
Выражения
Вторая смысловая форма строк
в Tcl ≈ это выражения. Несколько команд, таких как expr,
for
и if, считают один или несколько своих
аргументов выражениями и для вычисления их значения вызывают процессоры
выражений Tcl (Tcl_ExprLong, Tcl_ExprBoolean, и т.д.). Разрешенные
в Tcl выражениях операторы составляют подмножество операторов, разрешенных
в выражениях С, и они имеют такой же смысл и приоритет выполнения, как
и соответствующие им операторы С. Почти всегда значением выражения является
число (целое или с плавающей запятой). Например, выражение
дает результат 14,2. Выражения
Tcl отличаются от выражений С способом описания операндов, а также тем,
что поддерживают нечисловые операнды и сравнение строк.
Выражение Tcl состоит из комбинации
операндов, операторов и скобок. Между ними всеми можно ставить пробелы,
потому что при вычислении значения пробелы игнорируются. По возможности,
все операнды интерпретируются как целые числа, если не задано иное. Целые
числа могут иметь вид десятичного числа (обычно), восьмеричного (если первая
цифра числа есть 0) или шестнадцатеричного (если первые два символа
числа ≈ 0х). Если операнд не подпадает ни под один из названных
форматов, он считается числом с плавающей запятой, если это возможно. Числа
с плавающей запятой можно задавать любым из способов, воспринимаемым совместимым
с ANSI компилятором С. Исключение составляет запрет в большинстве версий
на суффиксы f, F, l, и L. Примеры правильных
чисел с плавающей запятой: 2.1, 3., 6e4, 7.91e+16. Если числовая интерпретация
невозможна, то операнд считается строковым и работать с ним может только
ограниченный набор операторов.
Операнды могут быть заданы
одним из следующих способов:
-
числовым значением ≈ целым или
с плавающей запятой;
-
переменной Tcl, используя обычную
нотацию со знаком $. В качестве операнда будет использовано значение
переменной;
-
строкой символов, заключенной
в двойные кавычки. Анализатор выражения выполнит подстановки переменных,
команд и с обратным слешем; полученное значение будет использовано в качестве
операнда;
-
строкой, заключенной в фигурные
скобки. Все символы между открывающей и закрывающей скобками будут считаться
операндом без каких-либо подстановок;
командой Tcl, заключенной в
угловые скобки. Команда будет выполнена, и ее результат будет использован
в качестве операнда.
Еще один способ задания
операндов назван в разделе "Встроенные
команды Tcl".
Если в выражении имели место
подстановки (например, внутри двойных кавычек), то они будут обработаны
процессором выражения. Хотя анализатор команд тоже может выполнить свою
часть подстановок (дополнительную серию подстановок) до вызова процессора
выражения. Поэтому обычно, во избежание выполнения анализатором команд
подстановок в содержимое выражения, лучше всего заключать выражение в фигурные
скобки.
В качестве примеров рассмотрим
простые выражения, в которых переменная a имеет значение ▒3▓,
а значение переменной b есть ▒6▓. Тогда выражение в левой
части каждой строки даст значение в ее правой части:
3.1
+ $a 6.1
2
+ "
$a.$b"
5.6
4*[llength
"
6 2"
] 8
{word
one} <
"
word $a"
0
Списки
Третьей основной смысловой формой строк в 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▓.
Двумерные массивы можно имитировать использованием индексов, состоящих
из нескольких составленных вместе частей. Например, команды
set
a(2,3) 1
set
a(3,6) 2
задают элементы массива а
с индексами ▒2,3▓ и ▒3,6▓.
В общем, элементы массивов можно
употреблять везде, где можно употреблять скалярные переменные. Недопустимо
наличие скалярной переменной и массива с одним и тем же именем. Нельзя
обращаться к скалярной переменной как к элементу массива. Для преобразования
скалярной переменной в массив и наоборот следует удалить существующую переменную
при помощи команды unset. Команда
array предоставляет набор средств для работы с массивами, в том числе получение
списка всех элементов массива и просмотр значений элементов по одному.
Переменные могут быть локальными
или глобальными. Если имя переменной используется тогда, когда не выполняется
процедура, то оно автоматически относится к глобальной переменной. Имена
переменных, используемых внутри процедуры, обычно ссылаются на локальные
переменные, ассоциированные с данным выполнением этой процедуры. Локальные
переменные удаляются по окончании работы процедуры. При выполнении процедуры
для указания на то, что имя является именем глобальной переменной, может
использоваться команда global (она
в некотором смысле аналогична extern в С).
Встроенные команды
Библиотека Tcl предоставляет
набор встроенных команд. Эти команды будут доступны в любом приложении,
использующем Tcl. Дополнительно к этим командам приложения могут определять
свои собственные команды, а также команды, определенные в виде процедур
Tcl. Полный аннотированный список встроенных команд приведен в разделе
"Встроенные команды Tcl".
. В нем слова, выделенные
полужирным шрифтом, представляют собой имена команд и прочие слова, которые
следует передавать интерпретатору без изменения. Слова, выделенные курсивом,
представляют собой метасимволы, они обозначают собой некоторое возможное
значение, допустимое для ввода. Многоточие указывает на возможность подстановки
произвольного количества дополнительных аргументов или групп аргументов,
в том же формате, что и предшествующий аргумент или группа.
Встроенные переменные
env
errorCode
errorInfo
Библиотека Tcl автоматически
создает и управляет следующими глобальными переменными. Во всех случаях,
кроме специально оговоренных, эти переменные должны использоваться приложениями
и пользователями в режиме только для чтения.
env
Эта переменная задается
Tcl в виде массива, элементами которого являются переменные окружения процесса.
Чтение элемента даст значение соответствующей переменной окружения. Присвоение
значения элементу массива присвоит новое значение переменной окружения
или создаст ее, если она не была определена. Отмена (удаление) элемента
массива env удалит соответствующую
переменную окружения. Изменения в массиве будут влиять на окружение, переданное
дочерним процессам такими командами, как
exec.
Если будет удален весь массив env,
то Tcl перестанет отслеживать обращения к env
и перестанет обновлять значения переменных окружения.
errorCode
После возникновения ошибки
данная переменная будет определена для содержания дополнительной информации
об ошибке в форме, удобной для обработки программами. Переменная состоит
из списка Tcl с одним или более элементами. Первый элемент списка идентифицирует
общий класс ошибок и определяет формат остальной части списка. Ядро Tcl
использует следующие ниже форматы errorCode,
отдельные приложения могут задавать свои собственные форматы.
CHILDKILLED
pid sigName msg
Эта форма используется тогда,
когда дочерний процесс был удален по сигналу. Элементами, начиная со второго,
являются: идентификатор процесса (десятичное число); символическое имя
сигнала, вызвавшего прекращение процесса; и короткое сообщение пользователю,
описывающее сигнал, например для SIGPIPE: ⌠Запись в конвейер без чтения⌠.
Символические имена сигналов приведены в файле signal.h, например, SIGPIPE.
CHILDSTATUS
pid code
Этот формат используется при
окончании дочернего процесса с ненулевым статусом выхода. Второй элемент
формата есть идентификатор процесса (десятичное число) и третий элемент
есть код выхода, возвращенный процессом (тоже десятичное число).
CHILDSUSP
pid sigName msg
Формат используется при временной
приостановке процесса по сигналу. Вторым элементом является:
-
идентификатор процесса (десятичное
число);
-
символическое имя сигнала, вызвавшего
приостановку процесса;
-
короткое сообщение пользователю,
описывающее сигнал, например: ⌠Фоновое TTY чтение■.
Символические имена сигналов
приведены в файле signal.h, например, SIGTTIN.
NONE
Формат используется для ошибок,
для которых нет никакой дополнительной информации, кроме сообщения, возвращенного
вместе с ошибками. В таких случаях список errorCode
будет состоять из одного элемента со значением NONE.
UNIX
errName msg
Если первый элемент errorCode
есть UNIX, то это означает, что ошибка произошла во время обращения к ядру
UNIX. Элемент errName содержит символическое имя возникшей ошибки, например,
ENOENT; имена определены в файле errno.h. Элемент msg есть соответствующее
errName сообщение пользователю, например, для случая ENOENT: ⌠Нет такого
файла или каталога■.
Для задания переменной
errorCode
приложения должны использовать такие библиотечные процедуры, как Tcl_SetErrorCode
и Tcl_UnixError, или использовать команду error. Если ни один из этих способов
не был использован, то после следующей ошибки ИНТЕРПРЕТАТОР Tcl установит
переменную на NONE.
errorInfo
После возникновения ошибки
эта строковая переменная будет содержать одну или более строк, идентифицирующих
команды и процедуры Tcl, исполнявшиеся в момент возникновения самой последней
ошибки. Ее содержимое принимает форму образа стека, со всеми вложенными
командами Tcl, которые в момент возникновения ошибки не были закончены.
Все права защищены 1992-1997
DataX/FLORIN, Inc.
Встроенные команды Tcl
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 ≈ имя скалярной
переменной, оно может состоять из каких угодно символов, кроме закрывающей
фигурной скобки.
В слове может быть любое
количество подстановок переменных. Подстановки переменных не выполняются
для слов, заключенных в фигурные скобки.
Если в слове есть символ
обратного слеша, то выполняется подстановка с обратным слешем. Во всех
случаях, кроме перечисленных ниже, обратный слеш пропускается, а следующий
за ним символ обрабатывается как обычный символ и включается в состав слова.
Таким способом в слово можно включать такие символы, как двойные кавычки,
закрывающие скобки и символ доллара без непреднамеренной специальной обработки.
Ниже перечислены последовательности символов, для которых подстановка с
обратным слешем выполняется специальным образом, и соответствующие подставляемые
значения.
\a |
Звуковой
сигнал (гудок) (0х7). |
\b |
Сдвиг
на одну позицию влево (0х8). |
\f |
Прогон
листа (0хс). |
\n |
Новая
строка, newline (0ха). |
\r |
Возврат
каретки (0хd). |
\t |
Табуляция
(0х9). |
\v |
Вертикальная
табуляция (0xb). |
\<newline>пробел |
Обратный
слеш, символ новой строки и все пробелы и табуляции после этого символа
заменяются на одиночный пробел. Данная последовательность уникальна в том
смысле, что она замещается в отдельном суб-проходе перед тем, как начинается
непосредственно анализ команды. Поэтому эта последовательность будет замещена,
даже если она стоит между фигурными скобками, и результирующий пробел будет
интерпретироваться как разделитель слов, если только он не будет стоять
между фигурными скобками или кавычками. |
\\ |
Обратный
слеш (\). |
\ooo |
Цифры
ooo (одна, две или все три) дают восьмеричное значение символа. |
\xhh |
Шестнадцатеричное
число ▒hh▓ дает шестнадцатеричное значение символа. Может присутствовать
любое количество цифр. |
Подстановки с обратным слешем
не выполняются в словах, заключенных в фигурные скобки, кроме подстановки
⌠обратный слеш ≈ новая строка■.
Если символ ▒#▓ будет стоять
в том месте, где Tcl предполагает первый символ первого слова команды,
то этот символ и все последующие символы до следующего символа новой строки
включительно истолковываются как комментарии и игнорируются. Символ комментария
действителен только тогда, когда он стоит в начале команды.
При воссоздании слов команды
каждый символ обрабатывается интерпретатором Tcl только один раз. Например,
если выполнялась подстановка переменной, то в значении переменной никаких
подстановок не производится; значение вставляется в слово без изменений.
Если выполнялась подстановка команды, то вставленная команда обрабатывается
целиком посредством рекурсивного вызова интерпретатора Tcl; не делается
никаких подстановок перед рекурсивным вызовом и не делается никаких дополнительных
подстановок в результат исполнения вставленного скрипта.
Подстановки не воздействуют
на границы слов в команде. Например, при подстановке переменной все значение
переменной становится частью одного слова, даже если это значение содержит
пробелы.
Команда after указывает,
что некоторая команда должна быть выполнена с задержкой по времени.
СИНТАКСИС
ОПИСАНИЕ
Команда используется для
того, чтобы отложить выполнение программы или выполнить указанную команду
в фоновом режиме в некоторый момент в будущем. У команды есть несколько
форм, зависящих от ее первого аргумента.
afterms
Ms ≈ целое число,
задающее задержку в миллисекундах. Команда обеспечивает задержку на соответствующее
число миллисекунд до своего завершения. Во время задержки приложение не
реагирует на события.
after
ms?script
script script...?
В этой форме команда завершается
немедленно, но при этом она обеспечивает выполнение Tcl-команды script
script script
через соответствующее время. Команда выполняется ровно
один раз в установленный момент времени. Команда формируется объединением
всех перечисленных аргументов
script
таким же образом, как при выполнении
команды concat. Команда выполняется на глобальном
уровне (вне контекста какой-либо Tcl-процедуры). Ошибки во время выполнения
команды (если они происходят) обрабатываются с помощью процедуры bgerror.
Команда
after в этой форме возвращает идентификатор, который может
быть использован для отмены отложенной команды с помощью команды after
cancel.
after
cancel id
Отменяет исполнение ранее
заявленной отложенной команды. Id определяет, какая именно команда
будет отменена. Значение
id должно совпадать со значением, возвращенным
предыдущей командой
after. Если соответствующая команда уже выполнена,
команда
after cancel игнорируется.
after
cancel script script...
Эта команда также отменяет
выполнение ранее заявленной отложенной команды. Все перечисленные скрипты
script объединяются через пробел таким же образом, как при выполнении
команды
concat. После чего ищется отложенная
команда с аналогичным скриптом. Если такая команда будет найдена, ее исполнение
будет отменено. В противном случае команда after cancel игнорируется.
after
idle
script?script script...?
Все перечисленные скрипты
объединяются через пробел таким же образом, как при выполнении команды
concat.
Сформированная таким образом Tcl команда выполняется позже. Она выполняется
ровно один раз в первом цикле обработчика событий, в котором не будет других
необработанных событий. Команда after idle возвращает идентификатор,
который может быть использован для отмены отложенной команды. Ошибки во
время выполнения команды (если они происходят) обрабатываются с помощью
процедуры bgerror.
after
info?id?
Эта команда используется
для получения информации об отложенных командах. Если аргумент id
отсутствует , то возвращает список идентификаторов отложенных команд. Если
аргумент
id указан и соответствует идентификатору отложенной команды,
которая не отменена и еще не выполнена, возвращается список из двух элементов.
Первый элемент списка √ Tcl-скрипт соответствующей команды, второй ≈ idle
или timer в зависимости от того, по какому событию предполагается
вызов команды.
Команды after ms
и after idle предполагают, что приложение управляется событиями.
Отложенные команды не выполняются, если в приложении не активизирован цикл
обработки событий. В приложениях, в которых он обычно не активизирован,
таких как
tclsh, цикл обработки событий может быть активизирован
с помощью команд vwait и update.
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,
которая выводит сообщение об ошибке в диалоговое окно и позволяет пользователю
просмотреть стек, описывающий, где именно эта ошибка произошла.
СИНТАКСИС
ОПИСАНИЕ
Команда binary предоставляет
средства для манипулирования двоичными данными. Первая из форм команды
конвертирует обычные Tcl-значения arg в двоичное число. Например,
вызванная с аргументами ▒16▓ и ▒22▓, она вернет 8-байтовое двоичную строку,
состоящую из двух 4-байтовых чисел, представляющих соответственно ▒16▓
и ▒22▓. Вторая форма команды выполняет обратное действие, она извлекает
из двоичной строки данные и возвращает их как обычные Tcl строки.
binary
format
Команда binary format
создает двоичную строку по правилам, заданным с помощью шаблона formatString.
Содержание
этой строки задается дополнительными аргументами arg.
Команда возвращает
сформированную двоичную строку.
Шаблон formatString содержит
последовательность из нуля или более спецификаторов преобразования, разделенных
одним или более пробелами. Каждый спецификатор преобразования состоит из
буквы, за которой может следовать число count. Как правило, спецификатор
использует один из аргументов arg чтобы получить величину для форматирования.
Буква в спецификаторе указывает тип преобразования (форматирования). Число
count
обычно указывает сколько объектов для форматирования выбирается из значения
arg.
Соответственно, count должно быть неотрицательным десятичным числом.
Если значение count равно ▒*▓, это обычно указывает, что надо использовать
все значение аргумента. Если число аргументов arg
не соответствует
числу спецификаторов, требующих для себя дополнительного аргумента, выдается
ошибка.
Обычно результат каждого
нового преобразования дописывается в конец возвращаемой строки. Однако,
с помощью специальных спецификаторов точку ввода нового значения (курсор)
можно передвигать по формируемой строке.
Ниже приведены допустимые
значения спецификаторов преобразований и описаны соответствующие преобразования.
a?count?
Передает в выходную строку
count
символов из соответствующего аргумента arg. Если в
arg содержится
меньше count байт, добавляются нулевые байты. Если в arg содержится
больше count байт, ⌠лишние■ байты игнорируются. Если count равно
▒*▓, используются все байты из arg. Если
count отсутствует,
используется один байт. Например, команда
binary format a7a*a alpha
bravo charlie
вернет строку, эквивалентную
alpha\000\000bravoc.
A?count?
То же, что и a, за исключением
того, что для заполнения используются не нулевые байты, а пробелы. Например,
команда
binary format A6A*A alpha
bravo charlie
вернет alpha bravoc.
b?count?
Передает в выходную строку
count
бит в порядке от младших к старшим в каждом байте. Аргумент
arg
должен состоять из последовательности нулей и единиц. Порядок байтов в
выходной строке тот же, что и во входной информации. Лишние биты отсекаются,
недостающие дополняются нулями. По умолчанию форматируется один бит. Если
число форматируемых битов не соответствует целому числу байтов, недостающие
биты дополняются нулями. Например, команда
binary format b5b* 11100
111000011010
вернет строку, эквивалентную
\x07\x87\x05.
B?count?
Тоже, что и b, но биты
выдаются в порядке от старших к младшим. Например, команда
binary format B5B* 11100
111000011010
вернет строку, эквивалентную
\xe0\xe1\xa0.
h?count?
Передает в выходную строку
count
шестнадцатеричных чисел в порядке от младших к старшим в каждом байте.
Аргумент arg должен состоять из последовательности символов, содержащихся
в множестве: ⌠0123456789abcdefABCDEF■. Порядок байтов в выходной строке
тот же, что и во входной информации. Лишние символы отсекаются, недостающие
дополняются нулями. По умолчанию форматируется одно шестнадцатеричное число.
Если число форматируемых чисел не соответствует целому числу байтов, недостающие
биты дополняются нулями.
Например, команда
binary format h3h* AB
def
вернет строку, эквивалентную
\xba\xed\x0f.
H?count?
Тоже, что и b, но биты
выдаются в порядке от старших к младшим. Например, команда
binary format H3H* ab
DEF
вернет строку, эквивалентную
\xab\xde\xf0.
c?count?
Передает в выходную строку
одно или несколько восьмибитных чисел. Если count не указан, аргумент
argдолжен
состоять из одного целого числа. В противном случае он должен состоять
из списка, содержащего не менее count целых чисел. Последние 8 бит
каждого числа сохраняются как один байт в выходной строке. Если count
равно
▒*▓, форматируются все числа в списке. Если в списке меньше чисел, чем
count,
выдается ошибка. Лишние числа в списке игнорируются.
Например, команда
binary format c3cc*
{3 -3 128 1} 257 {2 5}
вернет строку, эквивалентную
\x03\xfd\x80\x01\x02\x05,
тогда как команда
binary format c {2 5}
вернет ошибку.
s?count?
Эта форма аналогична c,
за исключением того, что она сохраняет 16-тибитовые числа. Последние шестнадцать
бит числа сохраняются как два байта, последний байт первым. Например, команда
binary format s3 {3
-3 258 1}
вернет строку, эквивалентную
\x03\x00\xfd\xff\x02\x01.
S?count?
Эта форма аналогична s,
за исключением того, что порядок байтов противоположный. Например, команда
binary format S3 {3
-3 258 1}
вернет строку, эквивалентную
\x00\x03\xff\xfd\x01\x02.
i?count?
Эта форма аналогична c,
за исключением того, что она сохраняет 32-хразрядные числа. Например, команда
binary format i3 {3
-3 65536 1}
вернет строку, эквивалентную
\x03\x00\x00\x00\xfd\xff\xff\xff\x00\x00\x10\x00
I?count?
Эта форма отличается от
i порядком байтов в числе. Например, команда
binary format I3 {3
-3 65536 1}
вернет строку, эквивалентную
\x00\x00\x00\x03\xff\xff\xff\xfd\x00\x10\x00\x00
f?count?
Эта форма аналогична c,
за исключением того, что она сохраняет числа с плавающей запятой в машинном
представлении (используемом для конкретной платформы). Например, на Windows
платформе с процессором Pentium команда
binary format f2 {1.6
3.4}
вернет строку, эквивалентную
\xcd\xcc\xcc\x3f\x9a\x99\x59\x40.
d?count?
Эта форма аналогична f,
за исключением того, что используется представление для десятичных чисел
с двойной точностью. Например, на Windows платформе с процессором Pentium
команда
binary format d1 {1.6}
вернет строку, эквивалентную
\x9a\x99\x99\x99\x99\x99\xf9\x3f.
x?count?
Записывает в выходную строку
count
нулевых байтов. Если count не задан, записывает один нулевой байт.
Если
count равно ▒*▓, выдает ошибку. Ни один из аргументов
arg
при форматировании не используется. Например, команда
binary format a3xa3x2a3
abc def ghi
вернет строку, эквивалентную
abc\000def\000\000ghi.
X?count?
Передвигает место будущей
вставки в выходную строку (курсор) на count байтов назад. Если аргумент
count
равен ▒*▓ или больше текущей позиции, передвигает курсор на начало строки.
Если
count не указан, передвигает его на один байт. Ни один из аргументов
arg
при форматировании не используется. Например, команда
binary format a3X*a3X2a3
abc def ghi
вернет dghi.
@ ?count?
Передвигает место будущей
вставки в выходную строку (курсор) на абсолютную позицию count.
Позиция 0 соответствует первому байту в строке. Если count больше
текущей длины строки, она дополняется до необходимой позиции нулевыми байтами.
▒*▓ указывает на конец строки. Если аргумент count не указан, команда
возвращает ошибку.. Ни один из аргументов arg при форматировании
не используется. Например, команда
binary format a5@2a1@*a3@10a1
abcde f ghi j
вернет
abfdeghi\000\000j.
binary
scan
Команда binary scan
просматривает двоичную строку
string, возвращая число выполненных
преобразований. Строка formatString содержит последовательность
спецификаторов преобразования. Каждый из аргументов varName содержит имя
переменной, в которую записывается результат очередного преобразования.
Поскольку спецификаторы преобразований
строятся по тем же правилам, что и для binary format, ниже приведены
примеры их использования с минимальными пояснениями. Принципиальным моментом
при исполнении команды binary scan является то, что если для очередного
преобразования, указанного в formatString, требуется больше байтов,
чем осталось до конца строки, то команда немедленно завершается, а соответствующая
переменная (в которую должен был записываться результат преобразования)
остается неизмененной. Если для записи результата очередного преобразования
не осталось переменной, команда возвращает ошибку.
a?count?
Команда
binary scan abcde\000fghi
a6a10 var1 var2
вернет значение 1. В
переменной
var1 будет записана строка abcde\000, а переменная
var2
не изменится.
A?count?
Команда
binary scan "abc efghi\000"
a* var1
вернет ▒1▓. В переменной
var1
будет записана строка ⌠abc efghi".
b?count?
Команда
binary scan\x07\x87\x05
b5b* var1 var2
вернет 2. В переменной
var1
будет записано ▒11100▓, в переменной var2 будет
записано ▒1110000110100000▓.
B?count?
Команда
binary scan\x70\x87\x05
b5b* var1 var2
вернет ▒2▓. В
переменной
var1 будет записано ▒01110▓. В переменной var2
≈ ▒1000011100000101▓.
h?count?
Команда
binary scan\x07\x86\x05
h3h* var1 var2
вернет `2▓. В
переменной
var1 будет записано 706. В переменной var2
≈ ▒50`.
H?count?
Команда
binary scan\x07\x86\x05
H3H* var1 var2
вернет ▒2.▓. В
переменной
var1 будет записано ⌠078.■. В переменной var2
≈ ▒05▓.
c?count?
Команда
binary scan\x07\x86\x05
c2c* var1 var2
вернет ▒2▓. В
переменной
var1 будет записана строка ⌠7 -122". В переменной
var2
≈ ▒5▓. Обратите внимание, что команда возвращает числа со знаком.
Чтобы преобразовать их в числа без знака можно использовать выражение:
expr ( $num + 0x100
) % 0x100
s?count?
Команда
binary scan\x05\x00\x07\x00\xf0\xff
s2s* var1 var2
вернет ▒2▓. В переменной
var1
будет записана строка '5 7'. В переменной var2 ≈ ▒-16▓.
Обратите внимание, что команда возвращает числа со знаком. Чтобы преобразовать
их в числа без знака можно использовать выражение:
expr ( $num + 0x10000
) % 0x10000
S?count?
Команда
binary scan\x00\x05\x00\x07\xff\xf0
S2S* var1 var2
вернет ▒2▓. В
переменной var1 будет записана строка '5 7'. В переменной
var2
≈ ▒-16▓.
i?count?
Команда
binary can\x05\x00\x00\x00\x07\x00\x00\x00\xf0\xff\xff\xff
i2i* var1 var2
вернет ▒2▓. В переменной
var1
будет записана строка ⌠5 7". В переменной var2 ≈ ▒-16▓.
Обратите внимание, что команда возвращает числа со знаком. В Tcl нет возможности
перевести его в число без знака.
I?count?
Команда
binary\x00\x00\x00\x05\x00\x00\x00\x07\xff\xff\xff\xf0
I2I* var1 var2
вернет ▒2▓. В переменной
var1
будет записана строка ⌠5 7". В переменной
var2 ≈ ▒-16▓.
f?count?
На Windows платформе с
процессором Pentium команда
binary scan\x3f\xcc\xcc\xcd
f var1
вернет ▒1▓. В
переменной
var1 будет записано ▒1.6000000238418579▓.
d?count?
На Windows платформе с
процессором Pentium команда
binary scan\x9a\x99\x99\x99\x99\x99\xf9\x3f
d var1
вернет ▒1▓. В переменной
var1
будет записано ▒1.6000000000000001▓.
x?count?
Команда
binary scan\x01\x02\x03\x04
x2H* var1
вернет ▒1▓. В
переменной
var1 будет ▒0304▓. Преобразование не требует дополнительной
переменной
varName.
X?count?
Команда
binary scan\x01\x02\x03\x04
c2XH* var1 var2
вернет ▒2▓. В
переменной
var1 будет ▒1 2▓. В переменной var2≈ ▒020304▓..
Преобразование не требует дополнительной переменной varName.
@?count?
Команда
binary scan\x01\x02\x03\x04
c2@1H* var1 var2
вернет ▒2▓. В
переменной
var1 будет ▒1 2▓. В переменной var2 ≈ ▒020304▓.
Преобразование не требует дополнительной переменной varName.
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.
Он используется как стандартный ввод для первой команды конвейера. Файл
должен быть открыт для чтения.
<< value ≈ value
используется как стандартный ввод для первой команды конвейера.
> 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. Если числовая интерпретация невозможна,
то операнд считается строковым, и работать с ним может только ограниченный
набор операторов.
Операнды могут быть заданы
одним из следующих способов:
-
числовым значением ≈ целым или
с плавающей запятой;
-
переменной Tcl, используя обычную
нотацию со знаком ▒$▓. В качестве операнда будет использовано значение
переменной;
-
строкой символов, заключенной
в двойные кавычки. Анализатор выражения выполнит подстановки переменных,
подстановки команд и подстановки с обратным слешем; полученное значение
будет использовано в качестве операнда;
-
строкой, заключенной в фигурные
скобки. Все символы между открывающей и закрывающей скобками будут считаться
операндом без каких-либо подстановок;
-
командой Tcl, заключенной в
угловые скобки. Команда будет выполнена, и ее результат будет использован
в качестве операнда;
-
как вызов математической функции,
аргумент которой может иметь любую из перечисленных выше форм, например
sin($x).
Список допустимых математических функций приведен ниже.
Если в выражении имели
место подстановки (например, внутри двойных кавычек), то они будут обработаны
процессором выражения, хотя анализатор команд тоже может выполнить свою
часть подстановок (дополнительную серию подстановок) до вызова процессора
выражения. Поэтому обычно, чтобы избежать выполнения анализатором команд
подстановок в содержимое выражения, лучше всего заключать выражение в фигурные
скобки.
В качестве примеров рассмотрим
простые выражения, в которых переменная 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▓ означает, что никаких предварительных преобразований
не производится.
ТИП
ПРЕОБРАЗОВАНИЯ
Последняя часть
спецификатора представляет собой букву, которая определяет тип преобразования.
Допускаются следующие значения.
d |
Преобразует
целое число в десятичную строку со знаком. |
u |
Преобразует
целое число в десятичную строку без знака. |
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 в следующем:
-
она не сортирует составленный
ей список;
-
она возвращает имена только
существующих файлов (в 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.
Кроме того, любой интерпретатор, созданный из безопасного интерпретатора,
также будет безопасным.
Безопасный интерпретатор
создается со следующим набором команд:
Следующие команды
в безопасном интерпретаторе скрыты:
Эти команды могут быть созданы
заново как 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.
При вызове процедуры в качестве
параметров можно указать значения специфичных параметров события ≈ такие
как координаты указателя манипулятора ⌠Мышь■, код клавиши и другие.
Все права защищены 1992-1999
DataX/FLORIN, Inc.
Встроенные
команды Tk
Safe Tk,
loadTk
Команда загружает Tk в безопасный
ИНТЕРПРЕТАТОР.
СИНТАКСИС
::safe::loadTk slave
?-use windowId?
ОПИСАНИЕ
Режим Safe Tk основан на режиме Safe Tcl, обеспечивающем
ограниченный и опосредованный доступ к автозагрузке и пакетам для безопасных
интерпретаторов. Safe Tk добавляет способность конфигурирования
интерпретатора для безопасных Tk операций и загрузки Tk в безопасные интерпретаторы.
Команда ::safe::
запускает необходимые структуры данных в безопасном интерпретаторе и загружает
в него Tk. Команда возвращает имя безопасного интерпретатора.
При работе с Tk в безопасном интерпретаторе
необходимо следовать правилам поддержания безопасности, а также специальным
рекомендациям для работы с Tk.
СМ. ТАКЖЕ
safe(n),
interp(n),
library(n),
load(n),
package(n),
source(n),
unknown(n)
bell
Команда подает звуковой сигнал.
СИНТАКСИС
ОПИСАНИЕ
Команда bell
подает сигнал громкоговорителем дисплея для window. Если этот аргумент
не задан, то по умолчанию используется дисплей главного окна приложения.
В некоторых случаях команда гасит работающий в данный момент хранитель
экрана (screen-saver), и окно снова становится видимым.
Bind
bind≈ привязка скриптов Tcl
к X событиям. Команда назначает событиям ввода от ⌠Мыши■ и клавиатуры (Х
событиям) исполнение скрипта Tcl.
СИНТАКСИС
bind тег
bind тег последовательность
bind тег последовательность
скрипт
bind тег последовательность+скрипт
ОПИСАНИЕ
Команда bind привязывает Tcl скрипты
к X событиям. Если заданы все три аргумента команды, то при каждом наступлении
события последовательность в окне (окнах), описанных тегом,
будет выполняться скрипт (скрипт Tcl). Если аргументу скрипт
предшествует знак ▒+▓, то скрипт добавляется к уже существующим привязкам
к последовательности; в противном случае он замещает все имеющиеся
привязки. Если аргумент скрипт пуст, то все имеющиеся привязки к
последовательности
отменяются, и последовательность становится несвязанной. Если аргумент
скрипт
присутствует, то команда bind возвращает пустую строку.
Если при отсутствии аргумента скрипт
аргумент последовательность задан, то команда возвращает скрипт,
привязанный к данной последовательности, или, в случае отсутствия такого
скрипта, пустую строку. Если не задан ни один из аргументов последовательность
и скрипт, то команда возвращает список, элементами которого служат
все последовательности, имеющие привязки к окну тег.
Аргумент тег перечисляет окна,
к которым выполняется привязка. Если значение аргумента начинается с точки,
скажем ▒.a.b.c▓, то оно должно представлять собой путь к окну; в противном
случае оно может быть произвольной строкой. Каждому окну приписан некоторый
список тегов, и привязка к данному окну осуществляется, если значение аргумента
тег
присутствует в этом списке. Команда bindtags позволяет приписать
окну произвольный набор тегов привязки; кроме того, по умолчанию окнам
приписаны следующие теги:
-
тег, являющийся именем внутреннего окна,
приписывается этому окну;
-
тег, являющийся именем окна верхнего уровня,
приписывается этому окну и всем его внутренним окнам;
-
тег, являющийся именем класса примитивов,
скажем Button, приписывается всем примитивам этого класса;
-
тег с именем all приписывается
всем окнам приложения.
ОБРАЗЦЫ
СОБЫИЙ
Аргумент последовательность
представляет собой последовательность одного или нескольких образцов событий.
Каждый образец может быть записан в одном из трех видов. В простейшем случае
это символ ASCII, скажем ▒a▓ или ▒|▓. Этот символ не может
быть ▒пробелом▓ или знаком ▒<▓. Этот вид образцов соответствует событию
KeyPress
для конкретной клавиши. Образцы второго вида длиннее, однако, этот вид
носит более общий характер. Его синтаксис выглядит следующим образом:
<модификатор-модификатор-тип-детализация>
Образец события целиком заключен в
угловые скобки. Внутри угловых скобок располагаются несколько модификаторов
(быть может, ни одного), тип события и дополнительная порция информации
(детализация), указывающая конкретную кнопку или комбинацию клавиш.
Одно из полей тип или детализация должно обязательно присутствовать,
остальные могут быть опущены. Поля разделяются пробелами или дефисами.
Третья форма образца используется для
задания поименованного виртуального события, определенного пользователем.
У нее следующий синтаксис:
<<имя>>
Образец события целиком заключен в
двойные угловые скобки. Внутри этих скобок содержится определенное пользователем
имя виртуального события. С виртуальным событием нельзя комбинировать модификаторы,
такие как Shift или Control.
Привязки к виртуальному событию можно создавать до описания самого события;
при динамическом изменении этого описания все окна, привязанные к событию,
будут обращаться к новому описанию.
МОДИФИКАТОРЫ
Модификаторы могут быть следующими:
Control |
Mod2, M2 |
Shift |
Mod3, M3 |
Lock |
Mod4, M4 |
Button1,
B1 |
Mod5, M5 |
Button2,
B2 |
Meta, M |
Button3,
B3 |
Alt |
Button4,
B4 |
Double |
Button5,
B5 |
Triple |
Mod1, |
M1 |
Если в строке приведено несколько элементов,
разделенных запятыми, то они взаимозаменяемы. У большинства модификаторов
есть очевидное X значение. Например, модификатор Button 1 требует
нажатия кнопки 1 для наступления события. Чтобы привязка соответствовала
данному событию, среди модификаторов события должны содержаться все модификаторы,
заданные в образце события. Кроме того событие может содержать и другие
модификаторы, не приведенные в описании привязки. Например, при нажатии
кнопки 1 одновременно с нажатием клавиш Shift и Ctrl событие
подойдет под образец <Control-Button-1>,
но не подойдет под образец <Mod1-Button-1>. Если ни один из модификаторов
не был задан, то в событии может присутствовать любая комбинация модификаторов.
Модификаторы Meta
и M заменяют любой
из идентификаторов от M1 до
M5,
ассоциированный с метаклавишами на клавиатуре (коды клавиш Meta_R
и Meta_L). При отсутствии метаклавиш или в случае, если они не ассоциированы
ни с каким модификатором, модификаторы Meta и M не будут
соответствовать никакому событию. Аналогично модификатор Alt заменяет
любой из модификаторов, ассоциированных с alt-клавишами на клавиатуре (коды
клавиш Alt_L и Alt_R).
Модификаторы Doubleи Triple
обеспечивают удобную обработку двойного щелчка ⌠Мыши■ и других повторяющихся
событий. Они требуют, чтобы данное событие повторилось дважды или трижды,
и накладывают ограничения на время и место его повторения: для того, чтобы
последовательность событий подходила под образец Double или Triple,
промежуток времени между событиями должен быть коротким, а ⌠Мышь■ не должна
сдвигаться. Например, комбинация <Double-Button-1> эквивалентна
паре <Button-1><Button-1>
с дополнительными временными и пространственными ограничениями.
ТИПЫ СОБЫТИЙ
Значением поля тип может быть
любой из стандартных типов X событий, а также некоторые дополнительные
сокращения. Ниже приведен список всех допустимых значений. Два имени, составляющие
пару, синонимичны.
ButtonPress |
Button |
Expose |
Map |
ButtonRelease |
FocusIn |
Motion |
|
Circulate |
FocusOut |
Property |
|
Colormap |
Gravity |
Reparent |
|
Configure |
KeyPress |
Key Unmap |
|
Destroy |
KeyRelease |
Visibility |
|
Enter |
Leave |
Activate |
Deactivate |
Последней частью длинной спецификации
события является детализация. Для типов
ButtonPress и ButtonRelease
это номер кнопки (1-5). Если номер кнопки задан, то под образец подойдет
только событие на указанной кнопке; если номер кнопки не задан, то под
образец подойдет событие на любой из кнопок. Замечание: задание номера
кнопки отличается от задания модификатора кнопки: в первом случае требуется,
чтобы кнопка была нажата или отжата; во втором ≈ чтобы какая-то другая
кнопка была отжата при наступлении события. Если номер кнопки задан, то
поле тип можно опустить: по умолчанию оно будет иметь значение ButtonPress.
Например, спецификатор <1> эквивалентен спецификатору <ButtonPress-1>.
Для типов KeyPressи KeyRelease
детализацию можно указать в виде описателя X клавиши. В их число
входят все алфавитно-цифровые символы ASCII (например, описательa
служит для описания символа ASCII ▒a▓), а также описатели для неалфавитно-цифровых
символов (описатель comma для запятой) и описатели для всех не ASCII-клавиш
клавиатуры (Shift_L для левой клавиши верхнего регистра, F1
для первой функциональной клавиши при ее наличии). Мы не приводим здесь
полный список клавиш. Он меняется от системы к системе, и его можно найти
в других частях X документации. При необходимости можно получить описатель
клавиши с помощью обозначения %K, описанного ниже. Если приведена
детализация
описателя клавиши, то поле тип может отсутствовать, по умолчанию
принимается значение KeyPress. Например, спецификатор <Control-comma>
эквивалентен спецификатору <Control-KeyPress-comma>.
ПОДСТАНОВКИ
И СКРИПТЫ ПРИВЯЗКИ
Аргумент скрипт команды bind
должен быть скриптом Tcl; при каждом наступлении события происходит выполнение
этого скрипта. Команда выполняется тем же интерпретатором, что и
команда bind, причем интерпретация происходит
на верхнем уровне (доступны только значения глобальных переменных). Если
в скрипте есть символы ▒%▓, то его исполнение не будет осуществляться
непосредственно. Каждый символ ▒%▓ и символ, следующий за ним, заменяются
данными о происшедшем событии, в результате чего генерируется новый скрипт.
Подстановка осуществляется в соответствии с приводимым ниже списком символов.
Если не оговорено противное, то подставляемая строка представляет собой
десятичное содержимое указанного поля события. Некоторые подстановки допустимы
только для событий определенных типов: при использовании их с событиями
других типов результат подстановки не определен.
%% Заменяется однократным
процентом.
%# Номер последнего
обработанного сервером запроса клиента (сериальное поле события).
Допустимо для событий всех типов
.
%a
Поле выше события, отформатированное как шестнадцатеричное число.
Допустимо только для событий Configure.
%b
Номер нажатой или отпущенной кнопки.
Допустимо только для событий ButtonPress
и ButtonRelease.
%c
Поле счетчик события.
Допустимо только для событий Expose.
%d Поле
детализация
события.
Символы ▒%d▓ заменяются строкой детализации.
Для событий Enter,
Leave,
FocusIn,
FocusOut
строка должна быть одной из следующих:
NotifyAncestor |
NotifyNonlinearVirtual |
NotifyDetailNone |
NotifyPointer |
NotifyInterior |
NotifyPointerRoot |
NotifyNonlinear |
NotifyVirtual |
Для прочих событий подставляемая строка
не определена.
%f |
Поле
фокус события
(0 или 1). Допустимо только для событий Enter
и Leave.
|
%h |
Поле
высота события.
Допустимо только для событий Configure и Expose.
|
%k |
Поле
код_клавиши события.
Допустимо только для событий KeyPress
и
KeyRelease.
|
%m |
Поле режим события.
Подставляется одна из строк NotifyNormal,
NotifyGrab,
NotifyUngrab
или
NotifyWhileGrabbed.
Допустимо только для событий Enter,FocusIn,
FocusOut
и Leave.
|
%o |
Поле
подавить_перенаправление
события.Допустимо только для событий Map,Reparent
и Configure.
|
%p |
Поле
размещать
события. Строка подстановки имеет вид PlaceOnTop или PlaceOnBottom.
Допустимо только для событий Circulate.
|
%s |
Поле
состояние события.
Для событий ButtonPress, ButtonRelease,
Enter,
KeyPress,
KeyRelease, Leave и Motion происходит подстановка десятичного
числа. Для события Visibility подставляется одна из строк isibilityUnobscured,
VisibilityPartiallyObscured
или VisibilityFullyObscured.
|
%t |
Поле время события.
Допустимо только для событий, содержащих поле
время.
|
%w |
Поле
ширина события.
Допустимо только для событий Configure и Expose.
|
%x |
Поле
x события. Допустимо
только для событий, содержащих поле x.
|
%y |
Поле y события.Допустимо
только для событий, содержащих поле y.
|
%A |
Заменяется символом ASCII,
отвечающим происшедшему событию,или пустой строкой, если событию не соответствуетникакой
символ ASCII (например, нажата клавиша верхнего регистра). Работу по переводу
события в ASCII символ выполняет XLookupString. Допустимо только
для событий KeyPress и KeyRelease.
|
%B |
Поле ширина_бордюра
события.Допустимо только для событий Configure.
|
%E |
Поле послать_событие
события.Допустимо для событий всех типов.
|
%K |
Код клавиши,
соответствующей данному событию, представленный текстовой строкой. Допустимо
только для событий KeyPress и KeyRelease.
|
%N |
Код клавиши, соответствующей
данному событию, представленный десятичным числом. Допустимо только для
событий KeyPress и KeyRelease.
|
%R |
Идентификатор корневого окна
события.Допустимо только для событий содержащих поле корень
|
%S |
Идентификатор подокна события,
представленный в виде шестнадцатиричного числа. Допустимо только для событий
содержащих поле подокно.
|
%T |
Поле
тип события. Допустимо
для событий всех типов.
|
%W |
Путь к окну, к которому отнесено
событие (поле окно события). Допустимо для событий всех типов.
|
%X |
Поле
x_корень события.
При использовании виртуально-корневого менеджера окон подставляемое значение
равняется x-координате в виртуальном корне. Допустимо только для событий
ButtonPress,
ButtonRelease, KeyPress, KeyRelease и Motion.
|
%Y |
Поле y_корень
события. При использовании виртуально-корневого менеджера окон подставляемое
значение равняется y-координате в виртуальном корне. Допустимо только
для событий
ButtonPress, ButtonRelease, KeyPress, KeyRelease
и Motion.
|
Строка подстановки для %-замещения форматируется
как обычный элемент списка Tcl. Это означает, что при наличии в строке
пробелов она заключается в фигурные скобки, а специальным символам, таким
как `$' и `{' может предшествовать обратная косая черта. Такая строка нормально
обрабатывается синтаксическим анализатором Tcl при выполнении скрипта.
Строки подстановки по большей части являются числами или корректно определенными
строками как, например, Above; такие строки не нуждаются ни в каком
специальном форматировании. Чаще всего форматирования требуют строки, замещающие
%A.
Если, например, скрипт имеет вид
insert %A
и вводимым символом является открывающая
квадратная скобка, то реально исполняемым скриптом будет
insert \[
т.е. в качестве первого аргумента insert
получит исходную строку подстановки (открывающую квадратную скобку). Если
бы обратная косая черта не была добавлена, Tcl не смог бы правильно обработать
скрипт.
НЕСКОЛЬКО
ПРИВЯЗОК, ОТВЕЧАЮЩИХ ОБРАЗЦУ
Данному 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,
то для установления соответствия привязке берется последнее из них.
ОШИБКИ
При возникновении ошибки в процессе
исполнения привязанного скрипта для выдачи сообщения об ошибке используется
механизм bgerror. Команда bgerror
исполняется
на верхнем уровне (вне контекста любой из процедур Tcl).
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. Если эти опции не
использовались, каждый новый виджет добавляется в конец списка своего непосредственного
предка.
Менеджер размещает виджеты в окне,
последовательно просматривая список упаковки. В момент обработки каждого
из размещаемых виджетов внутри мастера есть прямоугольная незаполненная
область. Эта область называется ⌠полость⌠. Для первого обрабатываемого
виджета ⌠полость⌠ совпадает со всей внутренностью мастер-окна.
Для каждого из размещаемых виджетов
выполняются следующие действия:
-
менеджер размещает прямоугольную область
для очередного виджета у стороны полости, заданной опцией -side.
Если значение опции top или bottom, то ширина области равна
ширине полости, а высота равна требуемой для виджета высоте плюс внешние
и внутренние поля, заданные опциями -ipady и -pady. Если
значение опции равно
left or right, высота области равна высоте
полости, а ширина определяется размером виджета плюс полями, заданными
опциями -ipadx и -padx. Область может быть расширена в одном
или обоих направлениях в зависимости от значения опции -expand (см.
ниже "Расширение виджетов").
-
менеджер определяет размеры виджета. Обычно
они равны размерам, необходимым для виджета, плюс удвоенные внутренние
поля, но могут быть расширены до размеров области (минус удвоенные внешние
поля) по одному или обоим направлениям в зависимости от значения опции-fill.
-
менеджер размещает виджет в отведенном
ему пространстве. Если виджет меньше свободного пространства, используется
значение опции
-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-координату
в мастер-окне для якорной точки виджета. Координата указывается на экране
в одной из следующих форм:
-
в пикселях (число),
-
в сантиметрах (число с буквой cна
конце),
-
в миллиметрах (число с буквой mна
конце),
-
в дюймах (число с буквой iна конце)
-
в точках (число с буквой pна конце,
точка равна 1/72 дюйма).
Якорная точка не обязана находиться
внутри мастер-окна.
-relx location
Аргумент location определяет
x-координату
в мастер окне для якорной точки виджета. Координата указывается на экране
в виде десятичного числа в долях соответствующего размера мастер-окна.
Так ⌠0.0■ соответствует левому краю мастер окна, 1.0 ≈ правому краю. Если
указаны обе опции, -x и -relx, то соответствующие
величины складываются. Например, -relx 0.5 -x -2 помещает якорную
точку на два пикселя левее центра мастер-окна.
-y location
Аргумент location определяет
y-координату в мастер-окне для якорной точки виджета. Координата указывается
на экране в одной из следующих форм:
-
в пикселях (число),
-
в сантиметрах (число с буквой cна
конце),
-
в миллиметрах (число с буквой mна
конце),
-
в дюймах (число с буквой iна
конце),
-
в точках (число с буквой iна
конце, точка равна 1/72 дюйма).
Якорная точка не обязана находиться
внутри мастер-окна.
-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 автоматически создает привязки к ней, определяющие ее поведение по умолчанию:
-
в ОС Unix кнопка становится активной при
появлении над ней курсора ⌠Мыши■ и дезактивируется, когда курсор ее покидает.
В системах Mac и Windows при нажатии клавиши 1 ⌠Мыши■
на переключателе кнопка активизируется, когда курсор ⌠Мыши■ находится на
кнопке и дезактивируется, когда курсор ее покидает;
-
при нажатии клавиши 1 ⌠Мыши■ на кнопке-переключателе
кнопка становится выделенной и выполняется команда, привязанная к ней;
-
если кнопка-переключатель находится в
фокусе ввода, то нажатие на клавишу пробела приводит к выполнению команды,
привязанной к этой кнопке;
-
если кнопка-переключатель находится в
состоянии 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 соответствие
образцам устанавливается операционной системой. Возможными расширениями
могут быть:
-
специальное расширение *, под которое
подходит любой файл;
-
специальное расширение "", под которое
подходит любой файл без расширения (т.е. файл, имя которого не содержит
точки);
-
произвольная строка символов, среди которых
нет символов маски (* и ?).
Ввиду того, что на различных платформах
используются различные правила соответствия, появление символов маски в
расширениях не допускается, за исключением специального расширения ▒*▓.
Расширения, в которых нет точки (например, ▒~▓), допустимы, но они могут
работать не на всех платформах.
ПРИМЕР
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.