UGN Security

# php-GTK+ to develope GUI's for windows

Posted By: Learner2

## php-GTK+ to develope GUI's for windows - 10/03/03 10:27 AM

Anyone play with this at all?

http://gtk.php.net

Prety cool stuff. Of course it works for Linux as well but I like using it in windows. What you can do with little effort is so cool. I am just getting started so I am looking for anyone who might have some tips.
Posted By: Infinite

## Re: php-GTK+ to develope GUI's for windows - 10/03/03 11:44 AM

I do Gtk-perl. Much fun, and not that hard. Unfortunately, there is no windows port yet, but I don't really want to program windows anyways :p

Infinite
Posted By: Learner2

## Re: php-GTK+ to develope GUI's for windows - 10/04/03 10:47 PM

Okay so I am starting on this. This is my first thing. I modified the sample hello.php code that came with the zip file.

php-gtk-0.5.2a-win32.zip

Code

<?php
/* $Id: hello.php,v 1.6 2002/11/25 18:22:05 fmk Exp$ */

if (!class_exists('gtk')) {
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
dl('php_gtk.dll');
else
dl('php_gtk.so');
}

function delete_event()
{
return false;
}

function destroy()
{
Gtk::main_quit();
}

function buttons()
{
global	$window; print 'Closing window\n';$window->destroy();
}

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

$button = &new GtkButton('Close');$button->connect('clicked', 'buttons');
$window->add($button);

$tt = &new GtkTooltips();$tt->set_delay(200);
$tt->set_tip($button, 'Closes out this Window', '');
$tt->enable(); /*realize the underlying GdkWindow, flag the GtkWindow's visibility and map it onto the screen, all in one simple line*/$window->show_all();

/*without the main loop, there is no PHP-GTK script*/

Gtk::main();

?>


I can get it up and running and it dose what I want it to but I have trouble adding widgets to it. The whole adding a child widget to the parrent is screwing me up or maybe my syntax is [censored]. Can anyone breake this down for me in forest gump terms? I know a widget is basicaly equal to an object in other languages. I am talking the child parent relationship

Why some widgets can only have one child and others unlimited.
Posted By: §intå×

## Re: php-GTK+ to develope GUI's for windows - 10/05/03 09:57 AM

Okay I am catching on. In order to set a widget inside another you have to specify using something like

$window->add($vbox);

This puts a verticle box inside the window. A sort of likeness to tables in HTML Here is what I have so far.

Quote:
For all those geeks who might still be wondering what is happening. Just do this... Unzip the zip package into the c:\ directory - that will do. And then start rolling. Check whether it is working by going into c:\php4 and typing this php c:\test\gtk.php
Posted By: Learner2

## Re: php-GTK+ to develope GUI's for windows - 10/06/03 12:27 AM

Okay moving along. My little learning script can connect to a database. I want to place an image in this puppy. A red sphear if it can not connect and a blue one if it can. To do this I need to use the Gdk widget GtkPixmap

Now here is what I have found so far on this

http://gtk.php.net/manual/en/gtk.gtkpixmap.php

Quote:

So duh, It is looking for an image with an xmp extension right? How the hell do I create on. I have photoshop, paint(of course), Flash, and paintshop pro. None of which will creat a xmp extension. Or I can create it but it is not truely creating this extension file type. Any help?

My code so far is shown below. It will now connect to a MySQL database and extrat data to dissplay in the GUI. I will get to making that more dynamic later.
Code

<?php
/* $Id: hello.php,v 1.6 2002/11/25 18:22:05 fmk Exp$ */
//
//
if (!class_exists('gtk')) {
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
dl('php_gtk.dll');
else
dl('php_gtk.so');
}
//
function delete_event(){
return false;
}
//
function destroy(){
Gtk::main_quit();
}
//
function buttons(){
global $window; gdk::beep();$window->destroy();
}
//
$window = &new GtkWindow();$window->connect('destroy', 'destroy');
$window->connect('delete-event', 'delete_event');$window->set_border_width(10);
$window->show(); //$Hbox_start = &new GtkHBox(false, 5);
$window->add($Hbox_start);
//
$vbox = &new GtkVBox(false, 5);$Hbox_start->add($vbox); // // //$frame = &new GtkFrame("Close section");
$frame->set_label("Click to exit");$frame->set_label_align(0.0, 0.5);
$frame->set_shadow_type(GTK_SHADOW_ETCHED_IN);$frame->show();
$vbox->pack_start($frame, true, true, 5);
//
//
$hbox1 = &new GtkHBox(false, 5); // //$label = &new GtkLabel();
$label->set_text("To close this window all you have \n to do is click on the button below. \n But be warned!! I can not be held \n responsible for what else it might do.");$label->set_justify(GTK_JUSTIFY_LEFT);
$frame->add($label);
$label->show(); // //$hbox2 = &new GtkHBox(false, 5);
$vbox->add($hbox2);
//
//
$button = &new GtkButton('Close');$button->connect('clicked', 'buttons');
$button->show();$hbox2->pack_start($button, true, true, 5); // // //$tt = &new GtkTooltips();
$tt->set_delay(200);$tt->set_tip($button, 'Closes out this Window', '');$tt->enable();
//
$vbox_section2 = &new GtkVBox(false, 5);$Hbox_start->add($vbox_section2); //$frame2 = &new GtkFrame("Close section");
$frame2->set_label("Database connection");$frame2->set_label_align(0.0, 0.5);
$frame2->set_shadow_type(GTK_SHADOW_ETCHED_IN);$frame2->show();
$vbox_section2->pack_start($frame2, true, true, 5);
//
//
$db_conn = mysql_connect ("address to server", Login, password); mysql_select_db(Login,$db_conn);
$name = mysql_query("SELECT * FROM Userinfo Where id = '1'"); while($name2 = mysql_fetch_array($name)) {$handle = "".$name2['First']." ".$name2['Last']."";
}
//
if ($db_conn){$label2 = &new GtkLabel();
$label2->set_text("Hello$handle, \n
If you are reading this \n
then you are connected \n
to the database.");
$label2->set_justify(GTK_JUSTIFY_LEFT);$frame2->add($label2);$label2->show();

}else{

$label2 = &new GtkLabel();$label2->set_text("mySQL Error: ".mysql_error());
$label2->set_justify(GTK_JUSTIFY_LEFT);$frame2->add($label2);$label2->show();
}
//
/*realize the underlying GdkWindow, flag the GtkWindow's visibility and map
it onto the screen, all in one simple line*/
//
\$window->show_all();
//
/*without the main loop, there is no PHP-GTK script*/
//
Gtk::main();
?>