PHP ja GTK

Mureakuha

Loikkaa: valikkoon, hakuun

Sisällysluettelo

Alkusanat

Tällä sivulla käsitellään GTK 1sen käyttöä PHPssä. Myös GTK 2sen käyttö on mahdollista.

Asennus

Mitä tarvitaan?

  • PHP 4 jossa on GTK-laajennus käännettynä. (Windows tai Linux)
  • Phalanger .NET PHP-kääntäjä, sisältää GTK-laajennuksen (Windows)

Windows (PHP 4)

Lataa uusimmat binaarit osoitteesta http://gtk.php.net/download.php (sisältää PHP:n) ja pura paketti esim. C:\php-kansioon.

Tämän jälkeen voit testata seuraavasti...

c:\php\php.exe e:\Projektit\php-gtk\teksti.php
tai jos et halua konsolia näkyviin
c:\php\php_win.exe e:\Projektit\php-gtk\teksti.php

Windows (Phalanger)

Lataa ja asenna binaari (http://ulita.ms.mff.cuni.cz:7002/Download/Beta3/Phalanger.msi). Sivuilta löytyy myös Visual Studio 2003-integraatiopaketti.

Kääntämisen helpottamiseksi voit tehdä Bat-tiedoston, jossa on seuraava sisältö:

@SET PATH=%PATH%;C:\Program Files\Phalanger\Bin
phpc hellow.php

Luo samaan kansioon käännettävän ohjelman kanssa myös App.config jonka sisältö on suunnileen seuraava (jos tämä puuttuu, valittaa virhettä):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<phpNet>
		<classLibrary>
			<add assembly="php_gtk.mng, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4ef6ed87c53048a3" section="gtk"
				earlyInit="true" />
		</classLibrary>
		
		<gtk>
			<set name="php-gtk.extensions"
				value="php_gtk_combobutton.dll, php_gtk_libglade.dll, php_gtk_scrollpane.dll, php_gtk_spaned.dll, php_gtk_sqpane.dll" />
		</gtk>
	</phpNet>
</configuration>

Linux (PHP 4)

wget http://gtk.php.net/do_download.php?download_file=php-gtk-1.0.1.tar.gz
gunzip php-gtk-1.0.1.tar.gz
tar -xf php-gtk-1.0.1.tar
cd php-gtk-1.0.1
./buildconf
./configure
make
make install

tai uusin cvs versio

cvs -d :pserver:cvsread@cvs.php.net:/repository login
cvs -d :pserver:cvsread@cvs.php.net:/repository co -r PHP_GTK_1 php-gtk
cd php-gtk
./buildconf
./configure
make
make install

Salasana: phpfi

Ensimmäinen ohjelma

Luo nyt esimerkiksi hellow.php, jonka sisällöksi jotain tämäntapaista:

<?php
// Luodaan ikkuna
$ikkuna = &new GtkWindow();
// Oletuskoko
$ikkuna->set_default_size(60,40);
// Annetaan ikkunalle otsikko
$ikkuna->set_title("Hello World!");
// Aseetetaan ikkuna keskelle ruutua
$ikkuna->set_position(GTK_WIN_POS_CENTER);
// Luodaan uusi nappi
$nappi = &new GtkButton("Hello World!");
// Lisätään se ikkunaan
$ikkuna->add($nappi);
// Näytetään kaikki
$ikkuna->show_all();
 
Gtk::main();
?>

Voit kääntää koodin Bat-tiedostolla (Phalanger) tai testata sitä sivun alussa olevien ohjeiden mukaan. Jos päätät käyttää Phlangeria, pitäisi sinulla olla kääntämisen päätyttyä Bin\hellow.exe, mikäli kaikki meni oikein.

Tulos on suunnilleen tällainen

Tulos on suunnilleen tällainen

Lisää objekteja

Koska yhdestä nappulasta ei oikeasti järkevää ohjelmaa saa, tarvitaan objekteja lisää...

Jos kerran seuraavalla lisätään yksi nappi...

// Luodaan uusi nappi
$nappi = &new GtkButton("Hello World!");
// Lisätään se ikkunaan
$ikkuna->add($nappi);

Niin seuraava tekesi loogisesti ajatellen kaksi nappia, vai?

// Luodaan uusi nappi
$nappi = &new GtkButton("Hello World!");
// Lisätään se ikkunaan
$ikkuna->add($nappi);
// Luodaan toinen nappi
$nappi2 = &new GtkButton("Hello World!");
// Lisätään se ikkunaan
$ikkuna->add($nappi2);

Eipäs toimikaan, vaan tulee seuraava virhe:

(hellow:19996): Gtk-CRITICAL **: file gtkbin.c: line 217 (gtk_bin_add): assertion `bin->child == NULL' failed 

Tämä johtuu siitä että, ikkunassa voi olla vaan 1 objekti. Siksi tarvitaan objekti jonka sisälle saadaan lisää niitä.

// Luodaan uusi laatikko
$laatikko = &new GtkHBox(); 
// tai $laatikko = &new GtkVBox();
 
// Luodaan uusi nappi
$nappi = &new GtkButton("Hello World!");
// Luodaan toinen nappi
$nappi2 = &new GtkButton("Hello World!");
// Lisätään se 'laatikon' alkuun
$laatikko->pack_start($nappi);
$laatikko->pack_start($nappi2);
// Ja lisätään laatikko ikkunaan
$ikkuna->add($laatikko);
Nyt tulos pitäisi olla tällainen Nyt tulos pitäisi olla tällainen

Nyt tulos pitäisi olla jompi kumpi (Eka on GtkHBox ja toinen GtkVBox)

Objektien asettelu

Asetteluun käytetään 'laatikkoja' GkHBox ja GtkVBox. Ensimmäinen on vaakasuora (horizontal) ja toinen pystysuora (vertical). Tilaa välillä saa parametereillä jotka on:

GtkHBox( [bool yhtenäinen = false , [int väli = 0 ]] )
GtkVBox( [bool yhtenäinen = false , [int väli = 0 ]] )

Näiden avulla sitten pitää asettelu toteuttaa, eli voit laitella niitä sisäkkäin.

Tapahtumat

Tapahtumien käsittelemiseen tarvitsee yhdistää signaali funktioon

(Objekti)->connect(signaali, funktio, [parametrit funktiolle])

<?php
 
// Luodaan ikkuna
$ikkuna = &new GtkWindow();
// Oletus koko
$ikkuna->set_default_size(100,40);
// Asetetaan se keskelle ruutua
$ikkuna->set_position(GTK_WIN_POS_CENTER);
 
// Luodaan 'laatikot' johon tavarat laitetaan
$paalaatikko = &new GtkVBox();
$laatikko = &new GtkVBox();
$laatikko2 = &new GtkHBox();
 
// Tehdään napit
$nappi1 = &new GtkButton("Lopeta");
$nappi2 = &new GtkButton("Tervehdi");
 
// Lisätään napit
$laatikko2->pack_start($nappi1); 
$laatikko2->pack_start($nappi2);
 
// Tekstinmuokkausalue
$teksti = &new GtkEntry();
// Tehdään siitä muokattava
$teksti->set_editable(true);
// Lisätään se laatikkoon
$laatikko->add($teksti);
 
$nappi1->connect("pressed","lopeta"); // nappi1:sen 'pressed'-signaali käsitellään-lopeta funktiossa
$nappi2->connect("pressed","terve"); // nappi2:sen 'pressed'-signaali käsitellään terve-funktiossa
 
// Funktiot
function lopeta(){
	Gtk::main_quit(); // Lopettaa ohjelman
}
function terve(){
	global $teksti;
	$nimi = $teksti->get_text(); // Otetaan teksti
	echo "Terve, $nimi!\n";
}
 
// Lisätään molemmat laatikot päälaatikkoon
$paalaatikko->add($laatikko);
$paalaatikko->add($laatikko2);
// Ja lisätään se ikkunaan
$ikkuna->add($paalaatikko);
// Näytettään kaikki
$ikkuna->show_all();
 
Gtk::main();
?>

Tämä tulostaa "Terve, annettu nimi!" konsoliin

Kuva:Php-gtk teksti.PNG

Esimerkki tuloksesta

Objektit

Käyttöliittymä

GtkEntry

Yksirivinen tekstin muokkaus elementti

GtkText

Monirivinen tekstin muokkaus elementti

GtkButton

Painettava nappi

GtkProgressBar

Etenemispalkki

GtkMenu ja GtkMenuBar

GtkMenu: Elementtit popup valikoille

GtkMenuBar: Valikkorivi

GtkColorSelection

Värin valinta elementti

GtkColorSelectionDialog

Värin valinta dialogi

GtkDrawingArea

Piirtoalue.

GtkCombo

Avattava luettelo ruutu, muokattava

GtkNotebook

"Muistilehtiö", tähän voit tehdä monta sivua joissa jokaisessa eri sisältö

GtkStatusbar

Tilarivi

GtkFontSelection

Fontin valinta elementti

GtkFontSelectionDialog

Fontin valinta dialogi

GtkCalendar

Kalenteri elementti

GtkCheckButton

"Valinta ruksi"

Asettelu

GtkFixed

Tämän avulla voit asetella tiettyyn elementin pisteeseen

GtkBox

Perusluokka "laatikoille".

Puuttuvat

GtkAccelGroup
      A structure containing accelerator key data. 
GtkAccelLabel
      A label that can display an accelerator key next to the text. 
GtkAdjustment
      Represents an adjustable bounded value. 
GtkAlignment
      A container that controls the alignment and scale of its child. 
GtkArrow
      An arrow pointing in one of the four cardinal directions. 
GtkAspectFrame
      A frame that constrains its child to a particular aspect ratio. 
GtkBin
      Base class for containers with just one child. 
GtkButtonBox
      Base class for GtkHButtonBox and GtkVButtonBox. 
GtkCheckMenuItem
      Menu item with a toggle indicator. 
GtkCList
      A multi-columned scrolling list widget. 
GtkContainer
      Base class for all container widgets. 
GtkCTree
      Widget that displays a hierarchical tree. 
GtkCurve
      Widget that allows editing of a curve. 
GtkData
      Abstract base class for objects containing data. 
GtkDialog
     Widget that eases creation of popup dialogs. 
GtkEventBox
      Widget used to capture events for widgets with no GdkWindow. 
GtkFileSelection
     Widget for selecting a file or a directory.
GtkFrame
      Container with a decorative frame and an optional label. 
GtkGammaCurve
      A subclass of GtkCurve for editing gamma curves. 
GtkHandleBox
      Widget for detachable window portions. 
GtkHBox
      Horizontal box container. 
GtkHButtonBox
      Container for arranging a group of buttons horizontally. 
GtkHPaned
      Container with two panes arranged horizontally. 
GtkHRuler
      Horizontal ruler. 
GtkHScale
      Horizontal slider widget for selecting a value from a range. 
GtkHScrollbar
      Horizontal scrollbar. 
GtkHSeparator
      Horizontal separator. 
GtkImage
      Widget for displaying a graphical image. 
GtkInputDialog
      Standard dialog for configuring input devices. 
GtkInvisible
      Internally used widget which is not displayed. 
GtkItem
      Abstract base class for GtkMenuItem, GtkListItem, and GtkTreeItem. 
GtkItemFactory
      A factory class for simplified menu creation. 
GtkLabel
     Widget that displays a small amount of text.
GtkLayout
      Scrollable widget allowing multiple children in fixed positions. 
GtkList
      Widget displaying a list of selectable items. 
GtkListItem
      A single element in a GtkList.  
GtkMenuItem
      Widget used for item in menus. 
GtkMenuShell
      Abstract base class for menu objects. 
GtkMisc
      Base class for widgets having their own alignment and padding. 
GtkObject
      The base class of the PHP-GTK class hierarchy. 
GtkOptionMenu
      Widget used to choose from a list of valid choices. 
GtkPacker
      
GtkPaned
      Base class for widgets with two adjustable panes. 
GtkPixmap
      Widget displaying a graphical image or icon. 
GtkPlug
      Toplevel widget for embedding into other processes. 
GtkPreview
      Widget to display RGB or grayscale data. 
GtkProgress
      Base class for GtkProgressBar. 
GtkRadioButton
      Button that is part of a group, only one of which may be selected. 
GtkRadioMenuItem
      Menu item that is part of a group, only one of which may be selected. 
GtkRange
      Base class for widgets that manipulate the value of a GtkAdjustment. 
GtkRuler
      Base class for horizontal and vertical rulers. 
GtkScale
      Base class for GtkHScale and GtkVScale. 
GtkScrollbar
      Base class for GtkHScrollbar and GtkVScrollbar. 
GtkScrolledWindow
      Adds scrollbars to its child widget. 
GtkSeparator
      Base class for GtkHSeparator and GtkVSeparator. 
GtkSocket
      Container for widgets from other processes. 
GtkSpinButton
      Widget offering masked numerical entry and/or selection. 
GtkStyle
      A class that determines the appearance of widgets. 
GtkTable
      Container that provides a flexible grid for packing its children. 
GtkTearoffMenuItem
      Menu item used to tear off and reattach its menu. 
GtkText
      Editable text-display widget. 
GtkTipsQuery
      Displays help about widgets in the user interface. 
GtkToggleButton
      Button that retains its state. 
GtkToolbar
      Container that creates bars of buttons and other widgets. 
GtkTooltips
      Adds tooltips to other widgets. 
GtkTree
      Widget for displaying hierarchical information. 
GtkTreeItem
      One node of a GtkTree widget. 
GtkVBox
      Vertical box container. 
GtkVButtonBox
      Container for arranging a group of buttons vertically. 
GtkViewport
      Provides scrolling capability for non-scrolling aware widgets. 
GtkVPaned
      Container with two panes arranged vertically. 
GtkVRuler
      Vertical ruler. 
GtkVScale
      Vertical slider widget for selecting a value from a range. 
GtkVScrollbar
      Vertical scrollbar. 
GtkVSeparator
      Vertical separator. 
GtkWidget
      Base class for user interface elements. 
GtkWindow
      Widget that provides windows for an application.


Tämä artikkeli on tynkä. Voit auttaa Kuhaa täydentämällä tämän sivun tietoja.
Henkilökohtaiset työkalut