Эта статья описывает создание кроссплатформенных GUI приложений на Perl с использованием модуля Tk (произносится "тикей"). Tk - инструмент для разработки приложений с графическим интерфейсом, первоначально был создан для использования с другим языком программирования - Tcl, но позднее был успешно реализован и для Perl и для
Python. Perl/Tk является прекрасным средством для быстрого создания кроссплатформенных GUI-приложений на Perl для Linux, UNIX и Windows.
Получение и установка
Perl/Tk прекрасно работает как на Windows, так и на Linux и остальных UNIX. Если вы используете ActivePerl, то Perl/Tk уже установлен.
Пользователям Linux/UNIX нужно скачать и скомпилировать исходные коды
Perl/Tk, стащить их можно отсюда. Установка
Perl/Tk в принципе не особо отличается от процедуры установки обычного модуля для Перл:
Perl Makefile.PL
make
make install
Perl/Tk скриптинг - основы
Сначала создается главное окно приложения:
$main = MainWindow -> New ();
После этого создаются остальные элементы управления такой конструкцией:
$child = $parent -> ChildType (parameters);
Пример:
#! /usr/bin/perl
use Tk;
$main = MainWindow -> new();
$button = $main->Button(-text => "This is Perl/Tk", -command => sub{exit});
$button -> pack(); # делаем кнопку видимой
MainLoop(); #включаем обработку событий
Чтобы создать элемент управления нужно вызвать функцию с именем, соответствующим имени компонента. Так, в примере выше была вызвана функция Button() для создания элемента управления Button.
Некоторые элементы управления доступные в
Tk:
- BrowseEntry - выпадающий список
- Button - кнопка
- Canvas - холст
- Checkbutton - переключатель
- Entry - ввод текста
- Label - статический текст
- Listbox - список
- MainWindow - главное окно
- Menu - меню
- Message - многострочный статический текст
- Radiobutton - переключатель
- Scrollbar - полоса прокрутки
- Text - многострочный ввод текста
- TextUndo - многострочный ввод текста с возможностью отмены действий
Остальные доступные контролы + возможные свойства каждого можно посмотреть в документации, поставляемой с Perl/Tk.
Обычно элемент управления (потомок) создаётся вызовом соответствующего метода родителя, как в первом примере. Так, чтобы создать чекбокс:
$checkbutton = $main -> Checkbutton ( -text => "Просто переключатель");
Perl/Tk скрипты - событийно-управляемы, функция Tk::MainLoop включает обработку событий.
Изменение свойств компонентов
Свойства изменяются путем вызова функции configure, например:
$checkbutton -> configure ( -foreground => "red" );
Этот вызов configure установит красный цвет текста чекбокса. В UNIX и Linux список доступных имён цветов хранится в /usr/lib/X11/rgb.txt.
Некоторые свойства компонентов:
- activebackground - цвет фона активного компонента
- activeborderwidth - толщина границы активного компонента
- activeforeground - цвет текста активного компонента,
- bg - цвет фона компонента
- bd - толщина границы компонента
- font - шрифт
- fg - цвет текста компонента
- image - картинка, отображаемая на компоненте
- relief - 3D вид компонента
- text - надпись на компоненте
Много из свойств контролируют контрол, когда он активен, т.е. когда курсор мыши находится над ним. Эти активные свойства можно отключить, установив значение переменной $Tk::strictMotif единицей (1).
#! /usr/bin/perl
use Tk;
$Tk::strictMotif = 1;
$main = MainWindow -> new();
$cmdExit = $main -> Button ( -text => "Exit", -command => \&cmdExit_Click, -fg => "blue" );
$cmdExit -> pack();
#изменяем свойство
$cmdExit -> configure ( -background => "white");
$cmdClick = $main -> Button ( -text => "Click!", -command => \&cmdClick_Click, -fg => "black", -bg => "steelblue");
$cmdClick -> pack();
MainLoop();
sub cmdExit_Click {
print "Exit button was pushed\n";
exit;
}
sub cmdClick_Click {
$cmdClick -> configure ( -background => "grey", -foreground => "black", -font => "arial" );
}
Из этого примера можно увидеть, как в Perl/Tk назначаются обработчики событий - через свойство
-command.
Во второй части документа будет подробно рассказано о том, как контролировать внешний вид элементов управления, их расположение (использование "сетки"), и еще много чего :). Скоро будет-с.
Примеры брать вот здесь.