PHP ja GTK
Mureakuha
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
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 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
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. |
