Часть 2. Прощай, мир!

Программирование на Gtk/Perl

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

Начиная введение в Gtk-perl, приведем пример простейшей программы. Эта программа создает маленькое окошко с одной кнопкой, на которой написано "Прощай, Мир!". Нажимая на кнопку или закрывая окно, мы закончим действие программы.

#!/usr/bin/perl -w use Gtk; # загрузить Gtk-perl модуль use strict; # хорошая идея для всех нетривиальных perl-скриптов set_locale Gtk; # локализация init Gtk; # инициализация Gtk-Perl # для удобства объявим переменные true и false my $false = 0; my $true = 1; # создаем виджет my $window = new Gtk::Window( "toplevel" ); my $button = new Gtk::Button( "Прощай, Мир!" ); # регистрация отзыва $window->signal_connect( "delete_event", \&CloseAppWindow ); $button->signal_connect( "clicked", \&CloseAppWindow ); # показать кнопку $button->show(); # установить атрибуты окна и показать его $window->border_width( 15 ); $window->add( $button ); $window->show(); # вызываем Gtk main Gtk; # конец программы exit(0); ### Вызвать подпрограмму, закрывающую окно sub CloseAppWindow{ Gtk->exit(0); return $false }

Разберем работу программы.

use Gtk; необходимо во всех Gtk-Perl программах. Данная строчка позволяет Перлу использовать переменные, функции, структуры, и т.д., которые определены в GTK.

init Gtk; также необходимо включать во все Ctk-Perl программы. Эта строка инициализирует модуль Gtk и определяет некоторые вещи вроде цветовой палитры или вида графического вывода.

set_locale Gtk; локализация, необходимая для корректного написания языков, с отличной от латиницы символикой.

new Ctk::Window() создает новое окно. Window Manager определяет как и где быдет выводиться создаваемое окно. Все GUI виджеты располагаются внутри нового окна, также вы можете создавать больше окон в своей программе. Вы также можете создавать диалоговые окна, используя new Gtk::Dialog();

new Gtk::Button(); создает новое окно. В нашем примере мы создаем одну кнопку с тектовым полем. Что произойдет если не поставить текст внутри кнопки? Gtk автоматически подстраивает размер окна в зависимости от длинны набранного на кнопке текста.

Функция border_width() берет container(например window) и устанавливает размер свободного места вокруг кнопки. Параметр, передаваемый функции(в пикселах), является шириной отступа.

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

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

Функция show() делает виджет видимым. Не выполняйте show() до того, как определите все свойства виджета. Если создается несколько дочерних виджетов, то их необходимо создавать до родительского виджета(т.е. показать кнопку до показа содержащего её окна).

main Gtk; запускает основной обработчик событий Gtk. Эта строчка должна всегда находится в каждой Cgk-Perl программе. Когда компилятор достигнет этой строки, Gtk приостановит события для X-сервера(такие как нажатие клавиши или мышиной кнопки), таймауты или file IO до получения соответствующего сигнала.

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


Предыдущая Начало Следующая
О Gtk-Perl Вверх Обзор виджетов