Introduction to PHP GTK

In this part of the PHP GTK programming tutorial, we will introduce the GTK library and create our first programs using the PHP programming language.

The purpose of this tutorial is to get you started with the GTK and PHP. GTK is one of the leading toolkits for creating graphical user interfaces. PHP is a highly popular scripting language used in server-side web development. It can be also used to create command line scripts via PHP CLI, PHP Command Line Interface.

PHP-GTK

PHP-GTK is a language binding for PHP to write GTK applications. PHP-GTK provides an object-oriented interface to GTK classes and functions. The home page for the project is at gtk.php.net. There we find a reference documentation.

In order to run examples, we need to install PHP-CLI, PHP-GTK and Cairo for PHP.

Installation

At the time of writing this tutorial, there are issues installing PHP-GTK on Linux. (Installing Cairo for PHP will be explained in the chapter dedicated to painting with Cairo.)

The following are required packages:

build-essential subversion php5-cli php5-dev libgtk2.0-dev libglade2-dev

If you are not having one of these, they must be installed.

svn co http://svn.php.net/repository/gtk/php-gtk/trunk php-gtk

Now download the sources from the subversion tree. Do not use the source tarballs. These instructions work for sources from the subversion repository.

./buildconf
./configure
make
sudo make install

These are commands used to build PHP-GTK. However, we will probably have issues during the process. This is due to past libtool changes.

./configure: line 11641: LTOPTIONS_VERSION: command not found
./configure: line 11642: LTSUGAR_VERSION: command not found
./configure: line 11643: LTVERSION_VERSION: command not found
./configure: line 11644: LTOBSOLETE_VERSION: command not foun

The configure script gives error messages.

$ pwd
/home/vronskij/Downloads/php-gtk
$ cat /usr/share/aclocal/ltoptions.m4 /usr/share/aclocal/ltversion.m4 \
    /usr/share/aclocal/ltsugar.m4 /usr/share/aclocal/lt~obsolete.m4 >> aclocal.m4

Now inside the build directory, we issue the above command. We will have a new file aclocal.m4 in our directory. (Tip found on ubuntuforums.org.) Hopefully, now the configure script will run.

extension=php_gtk2.so

The final step is to edit php.ini file and add the above line under the Dynamic Extensions section.

Simple example

Now that we have successfully installed the PHP-GTK library, we can start with a small example. In this example, we create a simple window. The window is centered on the screen.

<?php
 
/* 
ZetCode PHP GTK tutorial

This program centers a window on 
the screen.

author: Jan Bodnar
website: www.zetcode.com
last modified: September 2011
*/

class Example extends GtkWindow { 
     

    public function __construct() { 

        parent::__construct(); 
         

        $this->set_title('Simple'); 
        $this->set_default_size(250, 150); 

        $this->connect_simple('destroy', array('gtk', 'main_quit')); 

        $this->set_position(GTK::WIN_POS_CENTER);
        $this->show(); 
    } 
} 
     
new Example(); 
Gtk::main(); 
?>

This example shows a 250x150 px window in the center of the screen.

class Example extends GtkWindow { 

The Example class is based on the GtkWindow widget.

$this->set_title('Simple'); 

The set_title() method sets a title for the window.

$this->set_default_size(250, 150); 

This line sets a size of the window. It is going to be 250px wide and 150px high.

$this->connect_simple('destroy', array('gtk', 'main_quit')); 

Here we connect the destroy signal to a callback. The main_quit() method quits the application for good. The destroy signal is emitted, when we click on the close button in the titlebar, or press Alt+F4.

$this->set_position(GTK::WIN_POS_CENTER);

This line centers the window on the screen.

$this->show();

When everything is ready, we show the window on the screen.

new Example(); 
Gtk::main(); 

We set up the application. An infinite loop is created. From this point the application sits and waits for external events from the user or the system. The loop runs until it is terminated.

Simple
Figure: Simple

Creating a Tooltip

The second example will show a tooltip. A tooltip is a small rectangular window, which gives a brief information about an object. It is usually a GUI component. It is part of the help system of the application.

<?php

/* 
ZetCode PHP GTK tutorial

This code shows a tooltip on 
a window and a button.

author: Jan Bodnar
website: www.zetcode.com
last modified: September 2011
*/
 
class Example extends GtkWindow { 
     

    public function __construct() { 

        parent::__construct(); 
         
        $this->init_ui();

    } 

    public function init_ui() {

        $this->set_title('Tooltips');         
        $this->connect_simple('destroy', array('gtk', 'main_quit')); 

        $fixed = new GtkFixed();
        $this->add($fixed);

        $button = new GtkButton("Button");
        $button->set_size_request(80, 35);
        $button->set_tooltip_text("Button widget");

        $fixed->put($button, 50, 50);
        
        $this->set_tooltip_text("Window widget");

        $this->set_default_size(250, 150); 
        $this->set_position(GTK::WIN_POS_CENTER);
        $this->show_all();         
    }
} 
     
new Example(); 
Gtk::main();
 
?>

The example creates a window. If we hover a mouse pointer over the area of the window, a tooltip pops up.

$this->init_ui();

The creation of the interface is delegated to the init_ui() method.

$fixed = new GtkFixed();
$this->add($fixed);

The GtkFixed is a container widget that is used to position widgets at absolute coordinates. The second line sets this container for the GtkWindow of the example. A window has one central container.

$button->set_tooltip_text("Button widget");

We set the button's tooltip with the set_tooltip_text() method.

$this->set_tooltip_text("Window widget");

We set a tooltip for the window. The window is accessed through the $this variable.

$this->show_all(); 

When there are multiple widgets on the window, we have two options. Either to call show() on all widgets, or to call show_all(), which shows the container and all its children.

Tooltips
Figure: Tooltips

Quit button

In the last example of this section, we will create a quit button. When we press this button, the application terminates.

<?php

/* 
ZetCode PHP GTK tutorial

This program creates a quit
button. When we press the button,
the application terminates. 

author: Jan Bodnar
website: www.zetcode.com
last modified: September 2011
*/
 
class Example extends GtkWindow { 
     

    public function __construct() { 

        parent::__construct(); 
         
        $this->init_ui();

    } 

    public function init_ui() {

        $this->set_title('Quit button');         
        $this->connect_simple('destroy', array('gtk', 'main_quit')); 

        $fixed = new GtkFixed();
        $this->add($fixed);

        $button = new GtkButton("Quit");
        $button->set_size_request(80, 35);
        $button->connect_simple('clicked', array('gtk', 'main_quit'));

        $fixed->put($button, 50, 50);
                
        $this->set_default_size(250, 150); 
        $this->set_position(GTK::WIN_POS_CENTER);
        $this->show_all();         
    }
} 
     
new Example(); 
Gtk::main();
 
?>

Source code of the example.

$button = new GtkButton("Quit");

Here we create a button widget. The parameter of the constructor is the button's label.

$button->set_size_request(80, 35);

We set a size for the button.

$button->connect_simple('clicked', array('gtk', 'main_quit'));

We plug the main_quit() method to the button clicked signal.

$fixed->put($button, 50, 50);

We put the quit button into the fixed container at x=50, y=50.

This section was an introduction to the GTK library with the PHP language.