Начало программирования PHP-GTK

Эта документация подразумевает, что у вас уже установлены PHP, PHP-CPP и PHP-GTK3. Если не установлены — сначала вам сюда: https://phpsupreme.de/?page_id=88

Принцип программирования графического интерфейса состоит в построении древовидного иерархического списка элементов, так называемых виджетов, которые могут иметь определенные свойства, например цвет фона, и отвечать на определенные события, например нажатие кнопки мыши.

Самый первый элемент интерфейса — это окно. Оно может быть видимым, может быть невидимым, может быть панелью, всплывающим сообщением, или классическим окном, но оно обязано быть. Все остальные элементы располагаются внутри окна, и практически не могут выйти за его пределы. Окно относится к так называемым блочным элементам-контейнерам, т.е. таким, в которых могут располагаться другие элементы.

Важно: в каждом окне может располагаться только один элемент. Попытка расположить другие элементы в окне вызовет предупреждение и будет проигнорирована.

Чтобы расположить несколько (десятков) элементов в одном окне — их нужно располагать в другом блочном виджете, который в свою очередь расположится в нашем окне.

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

Важно: добавление элементов не всегда означает их моментальный вывод на экран. Чаще всего элементы добавляются один за одним, а затем отображаются одной командой.

Разберем базовую программу, написанную на PHP-GTK3

#!/usr/local/supreme/php/bin/php
<?php
Gtk::init();
function GtkWindowDestroy($widget=NULL, $event=NULL) {
Gtk::main_quit();
}
$win = new GtkWindow();
$win->set_default_size(640, 480);
$win->connect("destroy", "GtkWindowDestroy");
$win->show_all();
Gtk::main();

Разберем подробнее.

Gtk::init();

инициализация GTK-ядра. Это обязательно, и делается только один раз

function GtkWindowDestroy($widget=NULL, $event=NULL) {
Gtk::main_quit();
}

Это функция-каллбек, вызываемая при наступлении события, в данный момент закрытия окна.

Gtk::main_quit() — это корректный выход из основного цикла GTK. Он необходим, чтобы программа корректно завершалась после ее закрытия пользователем. Если этого не сделать — окно программы закроется, но сама программа может продолжать функционировать.

$win = new GtkWindow();

Создаем новое окно, и присоединяем его к экземпляру класса для последующего обращения к нему.

$win->set_default_size(640, 480);

Устанавливаем размер по умолчанию

$win->connect("destroy", "GtkWindowDestroy");

Подключаем каллбек-функцию GtkWindowDestroy по наступлению события destroy

$win->show_all();

Отрисовываем все виджеты, иерархически находящиеся под окном, то есть дочерние элементы родительского окна.

Gtk::main();

Запускаем основной цикл.

Важное замечание: по запуску этого цикла, основной цикл PHP блокируется, весь код который будет размещен после этой функции — выполняться не будет.

Обработка ваших алгоритмов будет происходить при помощи некоторых инструментов GTK, или с помощью мультипоточности (подробнее здесь: https://phpsupreme.de/?page_id=162).

В результате после запуска такой программы, мы увидим

На этом базовые навыки написания программы на PHP для GTK3 завершены.

Следующий урок — 5 минимально-необходимых виджетов для постройки интерфейса программы — https://phpsupreme.de/?page_id=456