PHP-GTK::Журнал СА 12.2004
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

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

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6143
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6856
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4139
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2978
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3781
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3789
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6283
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3134
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3434
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7246
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10616
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12336
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13969
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9100
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7053
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5362
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4594
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3402
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3128
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3378
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 2999
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 PHP-GTK

Архив номеров / 2004 / Выпуск №12 (25) / PHP-GTK

Рубрика: Программирование /  Автоматизация

АНДРЕЙ УВАРОВ

PHP-GTK

Наверное, не стоит говорить о том, какое большое распространение получил язык PHP в настоящее время. Преимущественно он используется в веб-программировании (собственно, как и задумывалось его создателем). Надёжно укрепившись на серверах, теперь не спеша переходит и на десктопы. Об этом свидетельствуют как минимум две вещи: появление поддержки ncurses и проект PHP-GTK, о чём и поговорим сегодня.

Данная статья ориентирована на достаточно широкий круг читателей, так как в ней не рассматриваются какие-либо сложные аспекты. И может оказаться полезной как для людей, желающих использовать PHP для написания приложений с графическим интерфейсом пользователя, выполняющихся на клиентской стороне, так и для тех, кто просто желает начать изучение GTK.

PHP-GTK представляет собой расширение (модуль), позволяющее создавать приложения с оконным графическим интерфейсом. Стоит заметить, что данное расширение является кроссплатформенным, речь идёт не только о *nix-подобных системах, но и Win. Всю документацию, исходные коды или же откомпилированное расширение вы найдёте на сайте проекта – gtk.php.net.

Что такое GTK?

Итак, что же такое GTK? На самом деле в данном случае правильней было бы говорить о GTK+. GTK представляет собой набор библиотек, используемых для создания оконного графического интерфейса пользователя. Основным отличием GTK+ от GTK является объектная ориентированность и наличие механизма сигналов. Аббревиатура GTK означает – GIMP Toolkit, так как изначально разрабатывалась для GIMP (в рамках одноименного проекта).

GTK+ основывается на двух основных понятиях: виджет и сигнал.

Виджетом называется любой компонент графического интерфейса, будь то кнопка, поле ввода или окно. Все виджеты наследуются от абстрактного класса GtkWidget. Виджеты, которые могут содержать другие виджеты, называются контейнерами. Предком контейнеров является Gtk Container (сам же GtkContainer наследуется от GtkWidget).

Сигналами называются сообщения, создаваемые виджетами. Сигналы используются для того, чтобы реагировать на действия пользователя. Например, при появлении курсора над кнопкой – экземпляром класса GtkButton, генерируется сигнал «enter», а при нажатии – сигнал «clicked». Сигналы наследуются. Для обработки сигналов используются callback-фукции. Не стоит путать сигналы с событиями. Сигналы существуют в рамках GTK. А события являются отражением механизма событий в оконной системе.

Итак, несколько «оглядевшись», можно приступить и к примерам.

Напишем простейшее приложение.

<?php

    if( !extension_loaded('gtk')) {  

        dl( 'php_gtk.' . PHP_SHLIB_SUFFIX);

    }

    $window = &new GtkWindow();

    $window->show();

    gtk::main();

?>

Рисунок 1

Разберём нашу программу «по косточкам».

Осуществляем проверку, загружено ли уже расширение, если нет, то загружаем его.

    if( !extension_loaded("gtk")) {  

        dl( "php_gtk." . PHP_SHLIB_SUFFIX);

    }

Создаём экземпляр класса GtkWindow – окно. И осуществляем его отображение вызовом метода show(). Если размер окна не устанавливается в программе, как в нашем случае, то используется размер по умолчанию – 200х200. То же касается и заголовка окна, по умолчанию это имя скрипта.

    $window = &new GtkWindow();

    $window->show();

Вызовом gtk::main() мы «включаем» основной цикл программы, то есть программа начинает слушать события. Без этой строки наше приложение просто отобразило бы окно и завершило на этом свою работу.

Если вы попробуете закрыть приложение, то оно всё равно не завершит работу, так как сигнал о завершении выполнения игнорируется

Для нормального завершения мы должны были обрабатывать сигнал «destroy» объекта window.

Итак, овладев основами, можно приступить к рассмотрению чуть более сложного примера.

<?php

    if( !extension_loaded('gtk')) {  

        dl( 'php_gtk.' . PHP_SHLIB_SUFFIX);

    }

    function button_click(&$text){

           $window = &new GtkWindow();

           // устанавливаем заголовок окна

           $window->set_title('Message');

           // устанавливаем размер окна

           $window->set_usize(200, 30);     

           $label = &new GtkLabel($text->get_text());

           // добавляем объект в контейнер

           $window->add($label);     

           $window->show_all();

    }

    $mainwindow = &new GtkWindow();

    // устанавливаем заголовок окна

    $mainwindow->set_title('Hello world');

    $mainwindow->connect_object('destroy', Array('gtk', ї

           'main_quit'));

    // Этот класс является специальным контейнером, который позволяет размещать по горизонтали

    // добавленные в него объекты.

    $box = &new GtkHBox();                        

    $button = &new GtkButton('press me');

    $entry = &new GtkEntry();

    $button->connect_object('clicked', 'button_click', $entry);

    $box->pack_start($entry);

    $box->pack_end($button);

    $mainwindow->add($box);

    $mainwindow->show_all();

    gtk::main();

?>

Рисунок 2 Рисунок 3

Особый интерес для нас в данном случае представляет метод connect_object(). Данный метод осуществляет присоединение callback-функции к нужному сигналу. По своему назначению метод connect_object() сходен с connect() (оба метода наследуются от GtkObject). Строку:

    $mainwindow->connect_object("destroy", Array("gtk", "main_quit"));

Можно было бы заменить вызовом метода connect(), но при этом нам было бы необходимо определять функцию для обработки сигнала «destroy».

    ...

    function mainDestroy(){

           gtk::main_quit();

    }:

    ...

    $mainwindow->connect("destroy", "mainDestroy");

    ...

Первым параметром connect() является имя сигнала, вторым – имя callback-функции.

Напишем похожую программу, только уже на языке Python.

sample.py:

    import gtk

    def button_click(text):

           window = gtk.Window()

           window.set_title("Message")

           window.set_usize(200, 30)

           label = gtk.Label(text.get_text())

           window.add(label)

           window.show_all()

    def main_quit(object):

           gtk.main_quit()

    mainwindow = gtk.Window()

    mainwindow.set_title("Hello world")

    mainwindow.connect("destroy", main_quit)

    box = gtk.HBox()

    button = gtk.Button("press me")

    entry = gtk.Entry()

    button.connect_object("clicked", button_click, entry)

    box.pack_start(entry)

    box.pack_end(button)

    mainwindow.add(box)

    mainwindow.show_all()

    gtk.main()

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

На данный момент PHP-GTK существует только для PHP4, но сейчас ведётся разработка следующей версии, в которой будет реализована поддержка GTK2 и PHP5, что выглядит весьма перспективно.


Комментарии отсутствуют

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

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru