<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF87-88:Мастер на все руки - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF87-88:%D0%9C%D0%B0%D1%81%D1%82%D0%B5%D1%80_%D0%BD%D0%B0_%D0%B2%D1%81%D0%B5_%D1%80%D1%83%D0%BA%D0%B8&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 23:07:35 GMT</lastBuildDate>
		<item>
			<title>Crazy Rebel: викификация, оформление</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF87-88:%D0%9C%D0%B0%D1%81%D1%82%D0%B5%D1%80_%D0%BD%D0%B0_%D0%B2%D1%81%D0%B5_%D1%80%D1%83%D0%BA%D0%B8&amp;diff=5947&amp;oldid=prev</link>
			<description>&lt;p&gt;викификация, оформление&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''Tcl''' Нестандартное программирование&lt;br /&gt;
&lt;br /&gt;
=Tcl Нестандартное программирование=&lt;br /&gt;
&lt;br /&gt;
: Хотите взлететь повыше, чем ''C'' и ''Perl''? '''Майк Сондерс''' открывает новую серию публикаций о менее известных, но не менее интересных языках программирования...&lt;br /&gt;
&lt;br /&gt;
Вы строчили на ''C'', баловались с ''Basic'' и программировали на ''Perl''. А может, формулировали задачи на ''Фортране'', применяли ''Python'' и даже атаковали ''Ada''. Но ваш аппетит к кодированию&lt;br /&gt;
не утолен… К счастью, в мире программирования всегда есть пища&lt;br /&gt;
для пытливого ума. Изучение новых языков – прекрасный способ расширить профессиональные знания. Да и резюме, включающее не только приевшийся ''С'', произведет большее впечатление на работодателя.&lt;br /&gt;
&lt;br /&gt;
Мы начинаем серию статей, посвященных не совсем обычным языкам программирования. Они далеки от основного русла [mainstream],&lt;br /&gt;
но тоже служат важным целям, а изучать их – одно удовольствие. Мы&lt;br /&gt;
предполагаем, что вы уже владеете базовыми понятиями, поэтому&lt;br /&gt;
не будем тратить время, объясняя, что такое переменная или цикл.&lt;br /&gt;
Опустим также некоторые чисто технические подробности: их можно&lt;br /&gt;
найти в документации.&lt;br /&gt;
&lt;br /&gt;
В данной серии мы выясним, откуда взялись эти языки и что делает&lt;br /&gt;
их интересными сегодня, и рассмотрим ряд практических примеров,&lt;br /&gt;
которые позволят вам продолжить освоение языка самостоятельно.&lt;br /&gt;
Правда, на четырех страницах особо развесистое приложение не проанализируешь, но трамплин для прыжка к написанию собственных программ мы вам подставим. И если у вас получится что-то действительно&lt;br /&gt;
стоящее, мы сможем опубликовать это на нашем DVD!&lt;br /&gt;
&lt;br /&gt;
==Тиклни меня==&lt;br /&gt;
&lt;br /&gt;
Наша серия начнется с рассказа о ''Tcl'' (часто произносится как английский глагол tickle – «щекотать»). Этот интерпретируемый язык придуман в 1988 г. на родине BSD Unix и других пионерских разработок в&lt;br /&gt;
компьютерных технологиях – в Калифорнийском университете Беркли.&lt;br /&gt;
Его основоположник, Джон Остерхаут [John Ousterhout], создал собственный «командный язык инструментов» – Tool Control Language, насмотревшись на недопеченные встраиваемые языки от других разработчиков. Его основными целями были возможность простого и эффективного встраивания в более крупные приложения и ускорение&lt;br /&gt;
процесса прототипирования – создания тестовых приложений, служащих для оценки какой-либо идеи.&lt;br /&gt;
&lt;br /&gt;
Сейчас эти задачи успешно решаются и другими языками (например, ''Python''), и невольно возникает вопрос: а зачем изучать ''Tcl'' – что в нем особенного? Во-первых, он облегчает разработку программ с&lt;br /&gt;
графическим интерфейсом. Для работы с ''PyGtk'' (реализация ''Python''&lt;br /&gt;
на ''GTK'') необходимо изучить структуру и особенности ''C''-ориентированного инструментария, а ''Tcl'' использует ''Tk'', несложный, но гибкий набор элементов GUI, существенно упрощающий организацию пользовательского интерфейса. Мы рассмотрим ''Tk'' более подробно чуть ниже.&lt;br /&gt;
&lt;br /&gt;
Многие козыри языка ''Tcl'' уже стянули ''Perl, Python'' и ''PHP'', но ''Tcl''&lt;br /&gt;
по-прежнему используется широко: именно его применяли при разработке программного обеспечения модуля оператора буровой вышки&lt;br /&gt;
компании Shell и космического телескопа Хаббла. Это очень серьезная&lt;br /&gt;
работа, так что в зрелости и стабильности ''Tcl'' сомневаться не приходится. Благодаря простоте освоения и интеграции в другие приложения язык принят на вооружение фирмами Oracle и IBM. В списке приложений с открытым исходным кодом, приведенном на сайте http://freshmeat.net/, более 300 ''Tcl''-проектов; среди них программа для мониторинга серверных процессов ''Moodss'', программа для записи дисков ''TkDVD'' и помощник кодировщика ''TkDiff''.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_tcl1.jpg|Рис. 1]]&lt;br /&gt;
&lt;br /&gt;
'''''Tcl/Tk'' в действии: ''Moodss'' анализирует ''Apache''.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Интерпретатор языка ''Tcl'' входит в состав большинства дистрибутивов и обычно устанавливается по умолчанию. Если вашем дистрибутиве его почему-либо нет, возьмите ''Tcl'' на нашем DVD в разделе&lt;br /&gt;
Разработка. ''Tcl'' – интерпретируемый язык, и вы обойдетесь без текстового редактора и командной строки, обвешанной ключами-флагами: все будет ясно с первого взгляда. Для запуска интерпретатора&lt;br /&gt;
''Tcl'' введите ''tclsh'' в командной строке. В строке приглашения появится&lt;br /&gt;
подсказка ''Tcl'' – лаконичное '''%'''; основы языка можно исследовать прямо с ходу. С чего начать? Конечно, с программы, выводящей на экранn строку «'''Hello, World!'''»&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 puts “Hello, world!”;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь '''puts''' – команда ''put string'', которая выводит заданную строку&lt;br /&gt;
в стандартный поток вывода ''stdout''. Можно записывать несколько операторов в одной строке, разделяя их точкой с запятой, или размещать каждый оператор на новой строке – это дело вкуса.&lt;br /&gt;
&lt;br /&gt;
После вывода попробуем ввод:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 gets stdin foostring;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это запрос на ввод строки; результат сохраняется в переменной&lt;br /&gt;
''foostring''. Обратите внимание на важную особенность языка: переменные не нужно объявлять до их использования. Чтобы вывести результат, воспользуемся уже известной нам командой '''puts''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 puts stdout $foostring;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ввод значений числовых величин также не представляет особых&lt;br /&gt;
сложностей. Рассмотрим пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 gets stdin x;&lt;br /&gt;
 gets stdin y;&lt;br /&gt;
 expr $x*$y;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первые две строки попросят вас ввести числа; так и сделайте. Введенные числа сохранятся в виде строк в переменных '''x''' и '''y''',&lt;br /&gt;
затем команда expr вычислит заданное ей выражение произведения '''x*y''' и&lt;br /&gt;
отобразит результат. Просто и мило! Переменные ''Tcl'' – не статически типизированные, и их можно определить в&lt;br /&gt;
любое время. Значения присваиваются переменным командой '''set''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 set x 7;&lt;br /&gt;
 echo $x;&lt;br /&gt;
 gets stdin y;&lt;br /&gt;
 set x $y;&lt;br /&gt;
 echo $x;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переменной '''x''' присваивается значение 7, '''x''' выводится на экран,&lt;br /&gt;
затем вводится значение '''y''', копируется в '''x'''', и '''x''' выводится снова.&lt;br /&gt;
&lt;br /&gt;
Перейдем к операторам условия. Наберите коды следующих примеров в текстовом редакторе, сохраните в файлах, а затем запускайте&lt;br /&gt;
интерпретатор командой '''tclsh &amp;lt;имя_файла&amp;gt;'''. Рассмотрим оператор условия '''if/else'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 gets stdin x;&lt;br /&gt;
 if {$x&amp;gt;10} {&lt;br /&gt;
 puts “Bigger than ten”;&lt;br /&gt;
 } else {&lt;br /&gt;
 puts “Less than ten”;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Правда, похоже на ''С''? Оператор цикла '''while''' работает в той же манере:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 gets stdin x;&lt;br /&gt;
 while {$x&amp;lt;=10} {&lt;br /&gt;
 puts “Enter a number bigger than 10”;&lt;br /&gt;
 gets stdin x; # User inputs number&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пока вы не введете число, большее 10, оператор будет требовать&lt;br /&gt;
ввода снова и снова. В строке с '''gets''' символ '''#''' означает начало комментария, а строка перед ним в ''Tcl'' должна заканчиваться точкой с запятой. В коде на ''Tcl'' вы нередко встретите «вложенные команды» (‘nested commands’), заключенные в квадратные скобки. Их результат может присваиваться другим переменным, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
set mystring “Hello, world!”;&lt;br /&gt;
set x [string length $mystring];&lt;br /&gt;
puts $x;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
С помощью вложенной команды '''string length''' в переменную '''x''' записывается длина строки '''mystring'''.&lt;br /&gt;
&lt;br /&gt;
==Процедуры==&lt;br /&gt;
&lt;br /&gt;
Итак, мы освоили ввод/вывод, переменные, операторы&lt;br /&gt;
условия, цикла и комментарии. Теперь поговорим о процедурах. Для объявления процедуры используется команда '''proc''', после чего процедура становится просто командой ''Tcl''. Процедура должна быть объявлена до ее использования –&lt;br /&gt;
иначе ждите сообщения об ошибке. Пример простой процедуры, перемножающей два числа, приведен ниже:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 proc multiply {x y} {&lt;br /&gt;
 set z [expr $x*$y];&lt;br /&gt;
 return $z;&lt;br /&gt;
 }&lt;br /&gt;
 puts [multiply 3 4];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке скрипта объявляется процедура '''multiply''' и приводится список ее аргументов ('''x''' и '''y'''), заключенный в фигурные скобки.&lt;br /&gt;
&lt;br /&gt;
Ниже в фигурных скобках определяется тело процедуры, а ее результат передается в основную программу оператором '''return'''. ''Tclsh'' первым делом выполнит последнюю строку скрипта (она находится вне процедуры), а вложенная команда вызывает процедуру, с тем, чтобы возвращаемое ею значение вывелось на экран командой puts. Запустив код, вы увидите 12.&lt;br /&gt;
&lt;br /&gt;
В данном примере оператор '''return $z'''; можно опустить: ''Tcl'' возвращает значение последнего оператора процедуры как результат. Но лучше указывать оператор ''return'' явно: читать ваш код будет значительно легче, особенно тем, кто привык программировать на C.&lt;br /&gt;
&lt;br /&gt;
Приведенный пример также демонстрирует область действия переменной. Аргументы и переменные, определенные в теле процедуры, являются локальными, и их нельзя использовать за пределами процедуры. Например, если вы попробуете вывести значение переменной '''z''' в основной программе ('''puts $z;'''), то получите сообщение об ошибке «переменная не определена» (‘no such variable’). Чтобы переменная была доступна в любом месте программы, ее необходимо объявить глобальной с помощью&lt;br /&gt;
команды '''global''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 global z;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Et voila!'' Теперь к переменной z можно обращаться и вне процедуры.&lt;br /&gt;
&lt;br /&gt;
==Разработка программ с GUI==&lt;br /&gt;
&lt;br /&gt;
Итак, основы ''Tcl'' изучены, и теперь вы сами можете попробовать что-нибудь написать. Список полезных&lt;br /&gt;
сайтов, где можно найти дополнительные материалы, приведен далее.&lt;br /&gt;
&lt;br /&gt;
А сейчас мы займемся понастоящему увлекательным делом – разработкой программ с графическим интерфейсом. Как упоминалось выше, к ''Tcl'' подвязан ''Tk'' – готовый набор виджетов (так называют элементы пользовательского интерфейса: кнопки, переключатели и т.д.), поэтому подобные программы занимают всего несколько строк кода. Если вы уже писали&lt;br /&gt;
программы с использованием ''Qt'' или ''GTK'', то оцените невероятную скорость разработки в ''Tcl/Tk'': больше не нужно трудиться над кодом инициализации и долгими часами старательно изучать API.&lt;br /&gt;
&lt;br /&gt;
Если консольные программы на языке ''Tcl'' используют интерпретатор ''tclsh'', то приложения с графическим интерфейсом ''Tcl/Tk'' используют ''wish'' (‘windowing shell’). Этот интерпретатор выдает простейшую форму, на которой можно размещать виджеты вашего будущего приложения. Сейчас вы увидите, как все просто! Запустив ''wish'', введите&lt;br /&gt;
следующие команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 button .mywidget -text “Clicktastic!”;&lt;br /&gt;
 pack .mywidget;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Готово! На форме появилась кнопка с надписью '''Clicktastic!'''. Ее даже можно&lt;br /&gt;
нажать, но ничего не произойдет, потому&lt;br /&gt;
что действие кнопки мы еще не определили. Команда '''button''' в первой строке создает&lt;br /&gt;
кнопку с именем '''.mywidget''' (имена виджетов&lt;br /&gt;
должны начинаться с точки). Используя это&lt;br /&gt;
имя, мы сможем ссылаться на данный объект в дальнейшем. Опция '''-text''' задает надпись на кнопке.&lt;br /&gt;
&lt;br /&gt;
Итак, создан объект '''.mywidget'''. Для отображения виджета в окне ''wish'' мы должны&lt;br /&gt;
«упаковать» его в это окно (командой '''pack'''). «Упаковка» (packing) – это система размещения и упорядочивания виджетов в окне программы или родительском виджете (сейчас у нас только одна кнопка, и окно пристроилось под нее автоматически). Виджеты можно изменять «на лету» – введите в окне терминала такой код, в добавление к предыдущим двум строкам:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 .mywidget configure -foreground green;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Текст '''Clicktastic!''' позеленел!&lt;br /&gt;
&lt;br /&gt;
Небольшое отступление: по сравнению c ''GTK'' или ''Qt'' внешний вид виджетов ''Tk'' может показаться не совсем привычным. Дело в том, что ''Tk'' использует только базовые библиотеки ''X'', а значит, не обеспечивает особых эффектов прорисовки (в частности, сглаживания); зато он быстр и нетребователен к памяти.&lt;br /&gt;
&lt;br /&gt;
Пора заставить нашу кнопку что-то делать при нажатии. Снова&lt;br /&gt;
запустите ''wish'' и введите в окне терминала следующие команды:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
 button .mywidget -text “Don’t click me” -command { puts “I said no!” };&lt;br /&gt;
 pack .mywidget&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Опция '''-command''' команды '''button''' описывает действия, выполняемые при нажатии кнопки, в фигурных скобках: в данном случае это оператор '''puts''', и он выводит указанную строку в стандартный поток&lt;br /&gt;
вывода. Теперь, как только мы нажмем на кнопку, этот текст появится&lt;br /&gt;
в окне терминала!&lt;br /&gt;
&lt;br /&gt;
==Диспетчер запуска приложений==&lt;br /&gt;
&lt;br /&gt;
Вы уже неплохо вооружены средствами для разработки графического&lt;br /&gt;
интерфейса. В завершение темы, создадим небольшую, но полезную&lt;br /&gt;
программу – диспетчер запуска приложений. На сайтах Freshmeat и&lt;br /&gt;
SourceForge пасутся табуны проектов этого рода. Они особенно популярны для оконных менеджеров&lt;br /&gt;
типа ''FluxBox'', не имеющих своих кнопок быстрого запуска.&lt;br /&gt;
&lt;br /&gt;
Применим полученные знания и напишем простенькое приложение для запуска ваших любимых программ (например, ''Firefox'' или&lt;br /&gt;
''Thunderbird'') и управления системными сервисами (например, ''SSHD'' или ''Apache''). Вот как будет выглядеть наш код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=tcl&amp;gt;&lt;br /&gt;
   #!/usr/bin/env wish&lt;br /&gt;
 set sshcommand “/etc/init.d/ssh”;&lt;br /&gt;
 global sshcommand;&lt;br /&gt;
 proc sshstart {} {&lt;br /&gt;
 global sshcommand;&lt;br /&gt;
 exec $sshcommand start &amp;amp;;&lt;br /&gt;
 }&lt;br /&gt;
 proc sshstop {} {&lt;br /&gt;
 global sshcommand;&lt;br /&gt;
 exec $sshcommand stop &amp;amp;;&lt;br /&gt;
 }&lt;br /&gt;
 proc launchbrowser {} { exec firefox &amp;amp;; }&lt;br /&gt;
 proc launcheditor {} { exec emacs &amp;amp;; }&lt;br /&gt;
 frame .app -borderwidth 10;&lt;br /&gt;
 .app configure -background lightblue;&lt;br /&gt;
 pack .app;&lt;br /&gt;
 button .app.ssh-go -text “Start SSHD” -command sshstart;&lt;br /&gt;
 button .app.ssh-end -text “Stop SSHD” -command sshstop;&lt;br /&gt;
 button .app.browser -text “Web browser” -command&lt;br /&gt;
 launchbrowser;&lt;br /&gt;
 button .app.launcheditor -text “Text editor” -command&lt;br /&gt;
 launcheditor;&lt;br /&gt;
 .app.ssh-go configure -foreground green;&lt;br /&gt;
 .app.ssh-end configure -foreground red;&lt;br /&gt;
 pack .app.ssh-go .app.ssh-end .app.browser .app.launcheditor;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Наш менеджер предусматривает четыре кнопки: две для запуска и&lt;br /&gt;
останова сервера ''SSH'' и еще две – для запуска ''Firefox'' и ''Emacs''. Первая&lt;br /&gt;
строка (вы могли встречать такую в скриптах ''Bash'') указывает интерпретатор для обработки скрипта – ''wish'', и благодаря ей уже не нужно набирать ''wish имя_файла'', чтобы скрипт заработал. Сохраним скрипт&lt;br /&gt;
в файл, например, '''/usr/bin/megatest''' и сделаем файл исполняемым&lt;br /&gt;
(''chmod +x /usr/bin/megatest''). Теперь мы можем запускать его командной строкой (''megatest'') или создать соответствующий ярлык на рабочем столе.&lt;br /&gt;
&lt;br /&gt;
Следующие две строки определяют глобальную переменную&lt;br /&gt;
''sshcommand'': это строка, содержащая команду запуска сервера ''SSH'',&lt;br /&gt;
она сэкономит вам набор команды. Кроме того, если ''SSH'' в вашей системе расположен в другом каталоге, достаточно будет отредактировать это определение, и не выискивать обращения к ''SSH'' по всей программе – совсем как с '''#define''' в ''С''.&lt;br /&gt;
&lt;br /&gt;
Далее идут четыре процедуры. Две последние уместились в одну&lt;br /&gt;
строчку; тем больше места останется для статьи, а кстати и код становится компактнее. Процедуры '''sshstart''' и '''sshstop''' предназначены&lt;br /&gt;
для запуска и останова сервера ''SSH'' и используют нашу глобальную&lt;br /&gt;
переменную '''sshcommand:''' она служит параметром команде '''exec''',&lt;br /&gt;
которая, таким образом, обращается к серверу ''SSH'', прибавив вторым&lt;br /&gt;
параметром '''start''' либо '''stop'''. Учтите, что ваша программа потребует&lt;br /&gt;
привилегий суперпользователя (root): только ему дозволено распоряжаться ''SSH''!&lt;br /&gt;
&lt;br /&gt;
Процедуры '''launchbrowser''' и '''launcheditor''' запускают соответственно ''Firefox'' и ''Emacs''; они запустят все что угодно в пределах вашего '''$PATH''', так что можете заменить и браузер, и редактор на свои любимые. Первый оператор головной программы создает виджет-рамку по имени '''.app''', он будет служить контейнером для остальных виджетов.&lt;br /&gt;
Рамки, как и кнопки, можно располагать в окне '''wish'''; '''.app''' позволит&lt;br /&gt;
нам задать контур вдоль границы окна. Ширина контура назначается&lt;br /&gt;
с помощью опции '''-borderwidth''' (здесь – 10 пикселей). Затем мы «упаковываем» созданную рамку в главное окно программы.&lt;br /&gt;
&lt;br /&gt;
Далее с помощью знакомой команды '''button''' мы создаем объекты, соответствующие кнопкам быстрого запуска. Что интересно, для размещения кнопок внутри рамки мы должны использовать префикс&lt;br /&gt;
'''.app''' в именах кнопок – тогда каждая из них будет «упакована» в&lt;br /&gt;
родительский виджет (рамку). Очень мощный аппарат для создания&lt;br /&gt;
сложных GUI!&lt;br /&gt;
&lt;br /&gt;
Попробуйте изменить имя объекта '''.app.launchedito'''r на '''.launcheditor'''&lt;br /&gt;
(не забудьте также изменить последнюю команду '''pack'''!). Запустите&lt;br /&gt;
скрипт, и увидите, что кнопка запуска редактора ''Emacs'' оказалась&lt;br /&gt;
вне рамки. Таким образом, составные имена объектов определяют&lt;br /&gt;
их взаимосвязь.&lt;br /&gt;
&lt;br /&gt;
С помощью команд '''configure''' задается цвет надписи на кнопках&lt;br /&gt;
управления сервисом ''SSH'' – попробуйте изменить '''foreground''' на&lt;br /&gt;
'''background''' и посмотрите, что получится. Наконец, мы «упаковываем»&lt;br /&gt;
все виджеты, соответствующие кнопкам, в одну рамку. Готово! Теперь&lt;br /&gt;
можете добавить другие кнопки и назначить им определенные действия по своему усмотрению.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF88_tcl2.pnf|Рис. 2]]&lt;br /&gt;
&lt;br /&gt;
'''Результат нашей работы: красочное меню запуска программ!'''&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
&lt;br /&gt;
Итак, создание небольших графических приложений в ''Tcl/Tk'' – до&lt;br /&gt;
изумления простая задача. Вот почему этот язык и его инструменты&lt;br /&gt;
используются при создании ПО для объектов и систем, требующих&lt;br /&gt;
надежной и безотказной работы и высокого быстродействия: ведь, к&lt;br /&gt;
примеру, программе для управления телескопом нужен не элегантно&lt;br /&gt;
сглаженный текст, а минимальный, четкий и легко модифицируемый&lt;br /&gt;
код интерфейса. Добавьте к этому огромную библиотеку расширений,&lt;br /&gt;
и получите язык без лишнего жира, зато с мускулами, способными&lt;br /&gt;
справиться с решением множества задач.&lt;br /&gt;
&lt;br /&gt;
Что дальше? Во врезке «Ссылки» приведены адреса сайтов с документацией и примерами скриптов – вы увидите, что можно приделать&lt;br /&gt;
интерфейсы ''Tcl/Tk'' к инструментам командной строки. Кроме того, ''Tk''&lt;br /&gt;
поставляется с очень полезными примерами, обычно они находятся в&lt;br /&gt;
каталоге '''/usr/share/doc/Tk8.4/examples/''' (цифры означают номер версии; подставьте вместо них вашу). Исходный код программ ''Moodss, TkDVD'' и ''TkDiff'' имеется на нашем DVD, из него можно почерпнуть немало идей для ваших проектов. Удачи вам! ''LXF'''&lt;br /&gt;
&lt;br /&gt;
==Расширения==&lt;br /&gt;
&lt;br /&gt;
Хотя в языке ''Tcl'' хватает команд для решения&lt;br /&gt;
большинства задач, можно обогатить его функции с помощью расширений. Расширения ''Tcl''&lt;br /&gt;
аналогичны библиотекам для языка ''C'' или дополнительным модулям для ''Python''. Самое&lt;br /&gt;
известное расширение – это, конечно, ''Tk'', но&lt;br /&gt;
доступны и многие другие, обеспечивающие&lt;br /&gt;
доступ к базам данных, обработку изображений и т.д.&lt;br /&gt;
&lt;br /&gt;
Расширения ''Tcl'' обычно пишутся на ''C'' или&lt;br /&gt;
''C++'', и для владеющих этими языками особых&lt;br /&gt;
затруднений тут не будет. Хорошее руководство по созданию расширений для ''Tcl'' есть на&lt;br /&gt;
http://www.equi4.com/pub/etc/extuse.html.&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
&lt;br /&gt;
* Официальный сайт: http://www.tcl.tk&lt;br /&gt;
* Документация: http://wiki.tcl.tk&lt;br /&gt;
* Проекты: http://www.tcllinks.org&lt;br /&gt;
* Модули расширений: http://www.flightlab.com/~joe/gutter&lt;/div&gt;</description>
			<pubDate>Fri, 12 Dec 2008 09:37:34 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF87-88:%D0%9C%D0%B0%D1%81%D1%82%D0%B5%D1%80_%D0%BD%D0%B0_%D0%B2%D1%81%D0%B5_%D1%80%D1%83%D0%BA%D0%B8</comments>		</item>
	</channel>
</rss>