php-GTK+ to develope GUI's for windows

Posted by: Learner2

php-GTK+ to develope GUI's for windows - 10/03/03 11: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 12:44 PM

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 11: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 fucked. 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 10: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 01: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:

pixmap_create_from_xpm can not load c:\path\to\image\my_image.png
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();
?>