14 мая 2009 г.

Создание простого окна. Часть 1.

В первой статье я опишу процесс создания стандартной программы Hello World. Мы создадим новое окно и поместим в него строку с текстом. В итоге у нас получится примерно следующее:


Итак. Создаём новый файл, называем его hello.php (в официальной документации к PHP-GTK 2 рекомендуется использовать расширение .phpw, но я, будучи пользователем Linux, не вижу в этом смысла, ибо программы запускаю из консоли). Весь приведённый ниже код помещаем в этот файл.


Сначала создадим новое окно:
$window = new GtkWindow();

Для правильного завершения выполнения программы необходим следующий код:
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
Метод connect_simple() предназначен для того, чтобы в зависимости от действий пользователя, указанных в первом параметре, выполнять функцию, указанную вторым параметром. Т.е. когда пользователь попытается закрыть окно, на что указывает сигнал 'destroy', вызывается встроенная функция Gtk::main_quit() и корректно завершает процесс. Без этого вызова окно закроется, но процесс так и останется.

Создаём текстовую строку. За это отвечает класс GtkLabel(). После создания мы можем добавить эту строку в окно с помощью метода add():
$label = new GtkLabel('Здравствуй, мир!');
$window->add($label);

Теперь остаётся только вывести окно со всем содержимым на экран:
$window->show_all();
Gtk::main();

Вот и всё. Как видите, ничего сложного нет. Да и кода очень мало. Для удобства приведу полныый код программы:
<?php
 
$window = new GtkWindow();
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$label = new GtkLabel('Здравствуй, мир!');
$window->add($label);
$window->show_all();
Gtk::main();
 
?>
 

14 комментариев:

Анонимный комментирует...

я установил php5-gtk2 из http://deb.orangearchive.net/apt.php

а при запуске скрипта из консоли ругается:

Fatal error: Class 'GtkWindow' not found in /home/programming/helloworld.php on line 3

что мне сделать? чтобы скрипт работал

Shecspi комментирует...

После установки PHP-GTK его необходимо подключить в php.ini (В Ubuntu этот файл находится по адресу /etc/php5/cli/php.ini). Для этого в конец файла добавьте строчку

extension = php_gtk2.so

Также для правильного отображения кирилицы необходимо добавить

php-gtk.codepage = UTF-8

Анонимный комментирует...

О Щастье, работает )))

Анонимный комментирует...

Немогу найти инфу, как установить всё под Win?

Shecspi комментирует...

Установку под Windows я описал на странице в группе Google

Анонимный комментирует...

Просто гугл глючил, когда я тыкал на страницы. Ща всё открылось спасибо.
Скачал сначало, не тот пак. Без гтк и не знал как его привязать :)

Только я не понял, разве не получится, скомпилировать всё в exe?
Нигде даже упоминания не нашёл =(

Shecspi комментирует...

Нет, PHP не поддерживает компиляцию, но можно указать, чтобы файлы *.phpw открывались через C:\php-gtk2\php.exe, тогда программа будет запускаться двойным щелчком.

Анонимный комментирует...

Я и не ждал от php компиляции, это делается сторонними средствами. Жаль, жаль, нужно было сделать декстоп для пользователей сайта, но в таком виде никто не захочет это использовать =(

Shecspi комментирует...

Видел где-то программу php2exe. Сегодня вечером попробую с ней разобраться и напишу результаты.

Shecspi комментирует...

php2exe прекрасно работает с обычными скриптами, но привязать к нему PHP-GTK у меня не получилось((

Анонимный комментирует...

Вот вариант.
http://www.roadsend.com/p/rePackage/reDownload.php?pageID=pccTrial&lp=2

Нужно копать в эту сторону :) Правда с поддержкой винды у них как-то не очень =(

Анонимный комментирует...

т.е. такой вариант невозможен?: я даю программу кому-либо, у кого не установлено ни PHP ничего больше, он ее пробует запустить и она запускается.
Можно ли как-то сделать установщик, который скопировал бы всё что надо куда надо и программа всё же запустилась?

Gene комментирует...

А я на Windows не ставил php-gtk.codepage = UTF-8

Все равно текст который прописан отображается нормально, а то, что через drag-n-drop приходится перекодировать, так идет он в UTF-8. Зато нет проблемы с русскими именами в файловых путях, видимо функции доступа к файлам не воспринимают Юникод.

Shecspi комментирует...

Безусловно, если файл с программой сохранен в cp1251, то не нужно явно указывать кодировку. Я же исходил из того, что utf8 является стандартом де-факто.