   #home PHP-GTK Tutorials PHP-GTK Tutorials PHP-GTK Reference

          PHP-GTK Tutorials
   Prev  Hello World Tutorial  Next
     _________________________________________________________________

Hello World Tutorial

   When you begin to learn a programming language, the first program you
   often write is a 'hello world' program. So, just to fit in with
   everyone else, the first tutorial in this manual just happens to be a
   'hello world' tutorial!

   Throughout the tutorials we expect a reasonable grasp of PHP itself.
   The tutorials are designed to give the user an idea of how to use
   PHP-GTK, and the ideas and techniques behind it.

   In this tutorial we will create a simple window with the text "Hello
   World!" in it.

   We will start by listing the program and will then explain each line
   of the program, giving an overview of a very basic PHP-GTK
   application.

   Example 1.1. PHP-GTK Hello World Program Listing

<?php

if( !extension_loaded('gtk')) {
    dl( 'php_gtk.' . PHP_SHLIB_SUFFIX);
}

function delete_event()
{
    return false;
}

function shutdown()
{
    print("Shutting down...\n");
    gtk::main_quit();
}

function hello()
{
    global $window;
    print "Hello World!\n";
    $window->destroy();
}

$window = &new GtkWindow();
$window->connect('destroy', 'shutdown');
$window->connect('delete-event', 'delete_event');
$window->set_border_width(10);

$button = &new GtkButton('Hello World!');
$button->connect('clicked', 'hello');
$window->add($button);

$window->show_all();

gtk::main();

?>


   Example 1.2. Loading PHP-GTK

<?php

if( !extension_loaded('gtk')) {
    dl( 'php_gtk.' . PHP_SHLIB_SUFFIX);
}

?>


   These first few lines check to see if the PHP-GTK extension is already
   available, and loads it if it isn't. This is done by the
   dl('php_gtk.dll'); or dl('php_gtk.so'); statements on Windows and
   Linux respectively. The PHP_SHLIB_SUFFIX takes care of the specific
   extensions used by Windows and Linux.

   Example 1.3. The delete_event() function

<?php

function delete_event()
{
    return false;
}

?>


   The delete_event() function is registered as a handler (see below) for
   the "delete-event" signal. It returns false, telling PHP-GTK to fire
   the event's default signal handler, which in this case is the
   destroy() method. If the function were to return true, PHP-GTK would
   stop the default signal handler running at this point. This is useful
   to know if you need to write a user-defined function in place of
   destroy() - for example, to produce a dialog box confirming that the
   user intends to close down the application.

   It is not strictly necessary to return false in order to connect the
   "delete-event" signal to the destroy() method, as this particular
   signal returns false by default. It is possible to not specify any
   behaviour at all for a window's "delete-event" signal, just so long as
   the "destroy" signal is handled in the correct way, as it is here.

   Example 1.4. The shutdown() function

<?php

function shutdown()
{
    print("Shutting down...\n");
    gtk::main_quit();
}

?>


   The shutdown() function is registered as a handler for the "destroy"
   signal. The function prints the text "Shutting down...\n" to the
   console and then calls the static function gtk::main_quit() .

   Example 1.5. The hello() function

<?php

function hello()
{
    global $window;
    print "Hello World!\n";
    $window->destroy();
}

?>


   The hello() function is registered as a handler for the "clicked"
   signal on the button. It globalises the $window variable so it can
   access the instance of GtkWindow created further down the script. It
   then prints the text "Hello World" to the console before calling the
   destroy() method on the window, which in turn fires the "destroy"
   signal, which in turn calls the shutdown() function.

   Another way that the hello() function would be able to access the
   $window variable is if the variable were passed as a custom parameter.

   Example 1.6. Setting up the Window

<?php

$window = &new GtkWindow();
$window->connect('destroy', 'shutdown');
$window->connect('delete-event', 'delete_event');
$window->set_border_width(10);

?>


   The next four lines set up the window itself. Firstly we create an
   instance of GtkWindow. Once this has been done successfully, we call
   the connect() method from the window in order to register the
   shutdown() function as the handler for the "destroy" signal and the
   delete_event() function as the handler for the "delete-event" signal.
   Finally, we call the set_border_width() function to set a 10-pixel
   wide border on the instance of GtkWindow that we just created.

   Example 1.7. Setting up the Button

<?php

$button = &new GtkButton('Hello World!');
$button->connect('clicked', 'hello');
$window->add($button);

$window->show_all();

?>


   These three lines of the script create and set up the button. In the
   first line of the above code snippet we create a new instance of the
   GtkButton widget. The argument to the constructor is the text we want
   the button to display - in this case "Hello World!". We then call the
   connect() method to register the hello() function we defined earlier,
   as the handler for the "clicked" signal. Finally we add the button to
   the window we previously created by calling the GtkContainer method
   add() from our containing $window, and then display everything
   contained by $window (and its child widget, $button) by calling the
   show_all() method, also from our instance of GtkWindow.

   Example 1.8. The call to gtk::main

<?php

gtk::main();

?>


   The final line of the script calls the static gtk::main function. This
   tells PHP-GTK that we have finished setting up our interface, and that
   the main loop can begin listening for the events fired by user
   interaction so that the callback functions we defined earlier can be
   called and the various actions carried out.
     _________________________________________________________________

   Prev               Home               Next
   PHP-GTK Tutorials   Up   PHP-GTK Reference
