Эта документация подразумевает, что у вас уже установлены 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