php-gtk

Disclaimer

Не знаю, обо что я ударился, но решил все таки попробовать, что можно сваять на связке php-gtk. Ногами не пинать, про быдлоязык не рассказывать — сам знаю 🙂

Устанавливаем

1. Установим для начала сопутствующие пакеты:

sudo yum install libsexy libsexy-devel php-devel re2c

2. Установим расширение cairo

sudo pecl install channel://pecl.php.net/cairo-0.2.0

3. Теперь скачаем php-gtk
ftp://ftp.gtk.org/pub/gtk/

4. Собственно сборка

cd php-gtk
./buildconf
./configure --prefix=/usr --enable-php-gtk --with-extra --with-html --with-libsexy --with-mozembed --with-sourceview --with-spell
make
sudo make install

5. Инициализируем расширения

sudo echo "extension=cairo.so" > /etc/php.d/cairo.ini
sudo echo "extension=php_gtk2.so" > /etc/php.d/gtk.ini

Кодим

1. Простой пример:

< ?php
if (!class_exists('gtk'))
die("Please load the php-gtk2 module in your php.ini\r\n");

$wnd = new GtkWindow();
$wnd->set_title('Gday!');
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));
$lblHello = new GtkLabel("Just wanted to say\r\n'Hi!'");
$wnd->add($lblHello);

$wnd->show_all();
Gtk::main();
?>

2. Пример посложнее:

< ?php

if(!class_exists('gtk'))
die("Please load the php-gtk2 module in your php.ini\r\n");

function login(GtkWindow $wnd, GtkEntry $txtUsername, GtkEntry $txtPassword)
{
$strUsername = $txtUsername->get_text();
$strPassword = $txtPassword->get_text();

$errors = null;

if (strlen($strUsername) == 0) {
$errors .= "Username is missing.\r\n";
}
if (strlen($strPassword) == 0) {
$errors .= "No password given.\r\n";
}

if ($errors !== null) {
$dialog = new GtkMessageDialog($wnd, Gtk::DIALOG_MODAL,
Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, $errors);
$dialog->set_markup(
"The following errors occured:\r\n"
. "<span>" . $errors . "</span>"
);
$dialog-&gt;run();
$dialog-&gt;destroy();
} else {
$wnd-&gt;destroy();
}
}

$wnd = new GtkWindow();
$wnd-&gt;set_title('Login');
$wnd-&gt;connect_simple('destroy', array('gtk', 'main_quit'));

$lblCredit = new GtkLabel('Please provide your data');
$lblUsername = new GtkLabel('_Username', true);
$lblPassword = new GtkLabel('_Password', true);
$txtUsername = new GtkEntry();
$txtPassword = new GtkEntry();
$btnLogin = new GtkButton('_Login');
$btnCancel = new GtkButton('_Cancel');

$lblUsername-&gt;set_mnemonic_widget($txtUsername);
$lblPassword-&gt;set_mnemonic_widget($txtPassword);

$btnCancel-&gt;connect_simple('clicked', array($wnd, 'destroy'));
$btnLogin-&gt;connect_simple('clicked', 'login', $wnd, $txtUsername, $txtPassword);

$tbl = new GtkTable(3, 2);
$tbl-&gt;attach($lblCredit, 0, 2, 0, 1);
$tbl-&gt;attach($lblUsername, 0, 1, 1, 2);
$tbl-&gt;attach($txtUsername, 1, 2, 1, 2);
$tbl-&gt;attach($lblPassword, 0, 1, 2, 3);
$tbl-&gt;attach($txtPassword, 1, 2, 2, 3);

$bbox = new GtkHButtonBox();
$bbox-&gt;set_layout(Gtk::BUTTONBOX_EDGE);
$bbox-&gt;add($btnCancel);
$bbox-&gt;add($btnLogin);

$vbox = new GtkVBox();
$vbox-&gt;pack_start($tbl);
$vbox-&gt;pack_start($bbox);

$wnd-&gt;add($vbox);
$wnd-&gt;show_all();
Gtk::main();
?&gt;

Эпилог

В общем сие чудо работает. Субъективно, а может и объективно, до связки perl-gtk этому «изделию» еще очень далеко, про разницу с python-gtk я вообще молчу. Но! При отсутствии навыков программирования на языках, отличных от сабжа, таки можно сваять что-нибудь простенькое, для личных нужд. Если вдруг у кого возникнет желание поизголяться, за информацией ходить сюда, инфа на английском, так что если у кого с этим трудности рекомендую для начала английский онлайн.

php-gtk

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *