Как стать автором
Обновить

Небольшая программа на PHP-GTK

Время на прочтение 3 мин
Количество просмотров 6.8K

PHP-GTK — это привязка инструментария для создания графического интерфейса GTK+ к языку программирования PHP. Про неё уже писали на Хабре. Очень многие скептически относятся к этой библиотеке, даже не столько к ней самой, сколько к использованию PHP на десктопе. Но, так или иначе, библиотека существует и, более того, развивается, о чём говорит недавняя новость на официальном сайте. Поэтому предлагаю более детально познакомиться с PHP-GTK и написать небольшую программу.

Программа создаёт окно и отображает в нём текстовый виджет, содержащий целое число (по умолчанию — 0), кнопку «Увеличить», при нажатии на которую число будет увеличено на один, и кнопку «Сбросить», сбрасывающее значение текстового виджета на ноль.


Создание базового окна


Окно создаётся с помощью конструктора класса GtkWindow(). Для определения позиции, занимаемой окном после создания, применяется метод set_position(), set_title() устанавливает заголовок, а set_size_request() — размеры окна (-1 говорит о том, что высота будет подобрана автоматически исходя из размеров содержимого). При закрытии окна издаётся сигнал 'destroy'. В этот момент для корректного завершения работы программы необходимо вызвать Gtk::main_quit(), для этого применяется метод connect_simple().
$window = new GtkWindow();
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_size_request(160, -1);
$window->set_title('PHP-GTK');
$window->connect_simple('destroy', 'Gtk::main_quit');


Виджеты


Как уже было сказано ранее, в программе используется один текстовый виджет GtkLabel() и две кнопки GtkButton(). Для того, чтобы разместить их в окне необходимо применить специальный вертикальный контейнер GtkVBox(), т.к. GtkWindow() позволяет поместить в себе только один виджет.
$vbox = new GtkVBox();
$label = new GtkLabel('0');
$btn_inc = new GtkButton('Увеличить');
$btn_cancel = new GtkButton('Сбросить');
$vbox->pack_start($label);
$vbox->pack_start($btn_inc);
$vbox->pack_start($btn_cancel);


Взаимодействие с пользователем


При нажатии на кнопки издаётся сигнал 'clicked', «услышав» который вызовем функцию increment() для увеличения числа и cancel() для сброса значения. В методе connect_simple() после названия функции идёт список передаваемых вызываемой функции параметров. В данном случае обеим функциям передаём виджет GtkLabel(). Для того, чтобы получить текст, находящийся в данный момент в GtkLabel() необходимо применить метод get_label(), а для установки нового значения — set_label().
$btn_inc->connect_simple('clicked', 'increment', $label);
$btn_cancel->connect_simple('clicked', 'cancel', $label);
 
function increment($label)
{
    $int = $label->get_text();
    $int++;
    $label->set_text($int);
}
 
function cancel($label)
{
    $label->set_text('0');
}

Теперь остаётся только добавить контейнер в окно и отобразить окно на экране. Полный код программы:
<?php
 
$window = new GtkWindow();
$window->set_position(Gtk::WIN_POS_CENTER);
$window->set_size_request(160, -1);
$window->set_title('PHP-GTK');
$window->connect_simple('destroy', 'Gtk::main_quit');
 
$vbox = new GtkVBox();
$label = new GtkLabel('0');
$btn_inc = new GtkButton('Увеличить');
$btn_cancel = new GtkButton('Сбросить');
$vbox->pack_start($label);
$vbox->pack_start($btn_inc);
$vbox->pack_start($btn_cancel);
 
$btn_inc->connect_simple('clicked', 'increment', $label);
$btn_cancel->connect_simple('clicked', 'cancel', $label);
 
function increment($label)
{
    $int = $label->get_text();
    $int++;
    $label->set_text($int);
}
 
function cancel($label)
{
    $label->set_text('0');
}
 
$window->add($vbox);
$window->show_all();
Gtk::main();
 
?>


Официальный сайт PHP-GTK
Мануал

Теги:
Хабы:
+5
Комментарии 96
Комментарии Комментарии 96

Публикации

Истории

Работа

PHP программист
175 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн