《桌面应用程序》 

PHP_GTK2.0 开发桌面应用程序

php gtk 官方网站

http://gtk.php.net/

官方有gtk的中文手册 具体安装请参见 手册

更简单的方法是用另外一款软件 名字叫做gnope

下载地址:http://www.gnope.org/download.php

安装过程很简单 安装好之后 在桌面会有个PHP-Gtk2 Applications 的快捷方式图标

双击该图标 会出现一个php的桌面程序 里面列出了所有的demo 有控件演示 还有游戏(前提是安装时选择了安装游戏)

应用详细讲解:
http://www.16ec.com/tp15/site/index.phphttp://blog.csdn.net/zhangking/archive/2010/08/20/5825416.aspx4 

看过这些程序 你是不迫不及待要自己莱写一个桌面应用程序了啊

下面就给出一个简单的登陆程序:

Php代码 [url=][/url]

   <?php   

  m* I1 V% `1 P' Q# r  W4 ]% v    if (!class_exists(‘gtk’)) {   
+ n$ u0 |' }6 e# ^5 w$ ^9 R' x3 u1 ]5 v8 ~" D
    die("lease load the php-gtk2 module in your php.ini\r\n");   + H  w9 d% h0 Q: c2 T+ _$ n) T
    }   0 z& a6 ~" g. K
; j5 P) C" T* q
    function login(GtkWindow $wnd, GtkEntry $txtUsername, GtkEntry $txtPassword)   ' f* c1 _3 T, F5 z, u
    {   
1 p5 w8 k7 }, q/ `, ]' P- g2 |# A. d6 x" V) J: p, F
    $strUsername = $txtUsername->get_text();   $ c. s% G8 G5 K* g' r8 O. j

/ ?( N1 |, m$ h8 T    $strPassword = $txtPassword->get_text();   ) O7 F) {7 }8 f& w: X( m& a

- q2 a+ Q( i% J( o9 X  T1 T, \8 m    $errors = null;   
2 e# z  F1 A- Y; o7 [; w" Y+ y. Y/ J# Y; e2 P1 Z1 J  A( `5 [
    if (strlen($strUsername) == 0) {   ( H$ J1 e! {$ S2 C4 i# g( ^, v3 O. D5 J

) o+ ^8 ^# h% B    $errors .= "Username is missing.\r\n";   " f6 [; J0 t# j3 n
        }   
2 j2 _7 H* R1 V; d2 q
; t6 W3 B0 W3 `2 |* X; A2 J% m; {    if (strlen($strPassword) == 0) {   : q* F; f8 ^$ u6 P- D

' g& p) w9 ?7 b$ F    $errors .= "No password given.\r\n";   5 `! P  o& c5 ], a4 m: h* s
        }   
3 T$ S; A& H' J1 m3 e9 `" M+ Z; f( T* T( T' c4 l& @* k% t& y! h1 J7 ?
    if ($errors !== null) {   5 E% r4 `  x) X* j

9 d9 D/ }# a6 |5 P. e: I    $dialog = new GtkMessageDialog($wnd, Gtk::DIALOG_MODAL,   
; `! C/ h2 \- l& p( j                Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, $errors);   
: x( V  ^: X3 G) b
. ]5 ]0 P; N' b0 P( g; k/ c+ k& k    $dialog->set_markup(   6 D# s& B3 J, p4 W
2 h+ q; e- b# M+ V. _' k3 x
    "The following errors occured:\r\n"
' v1 f" A0 a' A2 k                . "<span foreground=’red’>" . $errors . "</span>"
  G8 K" G! h$ L8 v! f, {( G            );   8 \  G4 ~: U& [
! M+ V2 [$ q/ w* A
    $dialog->run();   
; B! o% x: R3 y! b- U# |" F4 U4 j2 q( T7 N# |4 i$ k# K
    $dialog->destroy();   
; e4 \+ c/ L# O. j; M        }   
, ]. G0 C% @" G7 ?
* T, ^9 S* U% [: |% y    else {   
. ~3 v7 E$ q$ g4 `8 }! V& K8 _5 w1 Y7 M# e
    $wnd->destroy();   
: P+ b' }& c6 I/ a) }& }7 d        }   
9 d  T, H7 X, t! Z$ k; g- O6 j    }   
/ F5 q# l8 m) m( y. }
& T6 W: D- B& t9 }    $wnd = new GtkWindow();   
5 n4 y. A( b  [
$ G) I3 T4 F2 L8 W. o% s& E    $wnd->set_title(‘Login’);   - m& p. \- s: b& a

0 W$ w- E! n$ f    $wnd->connect_simple(‘destroy’, array(‘gtk’, ‘main_quit’));   , v9 m* G' C* x# }& k2 `
& ?% ~  x. l4 ]: {2 b
    $txtUsername = new GtkEntry();   
8 ]6 N& A0 M2 c; P  }
7 F) m4 q2 p/ ^    $txtPassword = new GtkEntry();   + M6 ~9 O: a% o; t
& w4 z/ e  ^' E' B0 {$ y9 k
    $lblUsername = new GtkLabel(‘_Username’,true);   / E7 `3 {) b3 N, H# h/ S5 T, }, x. Z
3 k4 d$ @. a2 j* z9 G
    $lblPassword = new GtkLabel(‘_Password’,true);   
/ N  [: J9 C# K; x1 B& a
/ R) O; y# `9 N5 |* ?" F* W    $btnLogin = new GtkButton(‘_Login’);   
% c6 ]* q9 i: L3 _' {0 |, v/ Q
$ S5 ]& w5 o; b) y; @: t" [; w    $btnCancel = new GtkButton(‘_Cancel’);   / h# _; J  l7 ~: t6 U
7 r" q- N  B) G7 d" ^/ W$ o8 C1 f5 D
    $lblUsername->set_mnemonic_widget($txtUsername);   ( o* F0 z" c: Q$ p

% K4 X7 l" g% @" S/ j+ {    $lblPassword->set_mnemonic_widget($txtPassword);   
! g$ X6 s% O) k5 A
! ~6 X7 _5 \7 x3 c/ \    $btnCancel->connect_simple(‘clicked’,array($wnd,’destroy’));   
- X& [  g. h; b7 V/ i2 o+ u
) Y0 b/ x1 _5 `) ~, u4 q" a    $btnLogin->connect_simple(‘clicked’,'login’,$wnd,$txtUsername,$txtPassword);   
1 Z6 h3 E( [' K4 S. d) c' Y: w' _; V" R7 j1 J
    $tbl = new GtkTable(3,2);   
, Z3 r' s- a- X' M+ e8 u0 k9 \% Z3 L6 F$ Y
    $tbl->attach($lblCredit,0,2,0,1);   9 P3 E1 d4 h. `  g

/ v2 {+ A% D; Y# U' y    $tbl->attach($lblUsername,0,1,1,2);   
: K, k8 ~0 v3 e6 Y) i5 ]  b  [. z' [4 @% K& ^1 v
    $tbl->attach($txtUsername,1,2,1,2);   ( k2 B- C& Z8 X1 k

& I$ j/ j; e. Y9 Q$ l    $tbl->attach($lblPassword,0,1,2,3);   3 C, d) ?0 O& h

: |$ h" \$ @: B    $tbl->attach($txtPassword,1,2,2,3);   
& s. E) P, M' o8 o8 V5 \+ l+ y: Y6 c
    $bbox = new GtkHButtonBox();   
, w+ M1 h9 ]6 T! X
# g3 c0 z* `' ~    $bbox->set_layout(Gtk::BUTTONBOX_EDGE);   
# F5 ^- x4 d# i" o% P+ V0 J: S; V/ e1 Y; r( H. x
    $bbox->add($btnLogin);   
' _- B8 z, W$ E3 a" O( O8 M, Y! ^8 o
    $bbox->add($btnCancel);   
4 H7 W' X1 a/ W3 ]/ }; m2 K  p& C/ [
5 v$ S/ t8 j; M" F$ W2 O& ?    $vbox = new GtkVBox();   
, P4 ^! d( Y2 d2 ?# K7 Z# f, V1 `) {  [; O/ J: f
    $vbox->pack_start($tbl);   # }3 @  I& @. |/ g2 i
& M: s3 a+ i3 S
    $vbox->pack_start($bbox);   
2 c1 A: D+ ]( c8 f3 x! b
8 h0 J$ k* Q7 ^6 w$ j. o    $wnd->add($vbox);   
- h6 K& c- Q  Q. q$ S4 X
4 [/ G! Q" s1 j0 [4 g    //$lblHello = new GtkLabel("This is my first php talbe application\nhaha");7 D& q& v  s4 I: Z; x5 

L- t$ Q

7 y* S9 n) [9 R/ w4 Z5 [9 U9 ~    //$wnd->add($lblHello);
; b' R( L0 n' x2 }8 j$ j
3 h/ Q7 T! l% F& k  O    $wnd->show_all();   + a' @2 A7 A% I8 S% q% ~$ x' _, a
    Gtk::main();   
' K5 h7 W# s; j1 ?    ?>  
/ L. @3 q/ a* X& z- q6 j; O- p' A1 z( g. W9 b* Z, G

: s9 e; D- c. H+ b<?phpif (!class_exists(‘gtk’)) {     die("lease load the php-gtk2 module in your php.ini\r\n");}function 

login(GtkWindow $wnd, GtkEntry $txtUsername, GtkEntry $txtPassword){    $strUsername = $txtUsername->get_text();    

$strPassword = $txtPassword->get_text();    $errors = null;    if (strlen($strUsername) == 0) {        $errors .= "Username 

is missing.\r\n";    }    if (strlen($strPassword) == 0) {        $errors .= "No password given.\r\n";    }    if ($errors 

!== null) {        $dialog = new GtkMessageDialog($wnd, Gtk::DIALOG_MODAL,            Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, 

$errors);        $dialog->set_markup(            "The following errors occured:\r\n"            . "<span foreground=’red’

>" . $errors . "</span>"        );        $dialog->run();        $dialog->destroy();    }else {        $wnd->destroy();    

}}$wnd = new GtkWindow();$wnd->set_title(‘Login’);$wnd->connect_simple(‘destroy’, array(‘gtk’, 

‘main_quit’));$txtUsername = new GtkEntry();$txtPassword = new GtkEntry();$lblUsername = new GtkLabel

(‘_Username’,true);$lblPassword = new GtkLabel(‘_Password’,true);$btnLogin = new GtkButton(‘_Login’);$btnCancel = new 

GtkButton(‘_Cancel’);$lblUsername->set_mnemonic_widget($txtUsername);$lblPassword->set_mnemonic_widget

($txtPassword);$btnCancel->connect_simple(‘clicked’,array($wnd,’destroy’));$btnLogin->connect_simple(‘clicked’,'login

’,$wnd,$txtUsername,$txtPassword);$tbl = new GtkTable(3,2);$tbl->attach($lblCredit,0,2,0,1);$tbl->attach

($lblUsername,0,1,1,2);$tbl->attach($txtUsername,1,2,1,2);$tbl->attach($lblPassword,0,1,2,3);$tbl->attach

($txtPassword,1,2,2,3);$bbox = new GtkHButtonBox();$bbox->set_layout(Gtk::BUTTONBOX_EDGE);$bbox->add($btnLogin);$bbox->add

($btnCancel);$vbox = new GtkVBox();$vbox->pack_start($tbl);$vbox->pack_start($bbox);$wnd->add($vbox);//$lblHello = new 

GtkLabel("This is my first php talbe application\nhaha");//$wnd->add($lblHello);$wnd->show_all();Gtk::main();?>5 ?4 d8 J7 y4 

R

# y; C6 S/ k3 W( ^% x在 Windows 上安装使用 Gnope+ q! V! O" M' M8 b
* Z2 }" |$ W! [/ @
使用 Gnope 在 Windows 上安装和维护 PHP-GTK 2 已经被证明几乎是最简单的方法。 Gnope 是全功能的 PHP-GTK 2 安装包,包含 PHP 5.1 

、GTK 2.6 和 PEAR 。 简单的点几下鼠标你就可以安装完成!  P+ V* S) K2 P: `4 e' ?
  j5 u9 w/ A8 a2 d  h* I. P
只要从 gnope.org 下载安装包,并跟随屏幕上的指引。 Gnope 也拥有它自己的 PEAR 自动安装频道, 那里你可以下载 PHP-GTK 2 程序添加

到官方的 PEAR 包中。 例如从 Gtk2 category 。" Q% h/ L; f- r( ?# C- x
& v$ p3 M2 @9 m! l. f! T2 U
手工安装) q4 o- }! N4 a: i' v
) x1 t& L' t0 \5 K: M
 PHP-GTK 2 下载 页面下载 PHP-GTK 2 的针对 Windows 的 Alpha 版本二进制发行包。解压缩文件到指定目录。一个名为 php-gtk 的目录

将会创建,并包含发行版的所有内容。$ r) ^: `/ R* o" t- n

: [7 i4 [9 V- g' k. o, K& K你需要 php.exe (CLI 版本)和 php5ts.dll ,这两个都可从 PHP 5 的 Windows 发行版中获得, 并且放置

 php-gtk 目录。如果你希望使用这个 php.exe 的其他扩展,请确保你已经存放二进制文件于此。
$ j' b1 G2 q' j2 c5 I
: ]6 J4 C8 P# l0 V- U; y8 @0 [; r之后,你必须设置环境变量 PATH 包含发行包中的 gtk+2.6.9 目录。 你也可以让批处理文件 

gtkpath.bat 在运行时设置适当的 PATH 变量用于当前命令行会话中。
4 O( V+ Q3 U: E; |) P0 A
- t, }0 n5 \7 E4 x! w从 CVS 编译6 G$ M; |8 d& B! C% B6 u* B- [

) q4 N% d/ X: f这里仅仅包含在 Windows 上安装 PHP-GTK 2 最主要的步骤。如果你希望了解更多内容,请从 CVS 上获取 

win32/README.win32.txt 并阅读。
" W7 O' ~4 I' d2 Y& G, `3 h$ l
& a  q5 S9 I) q( D+ j3 {; vfrom: http://gtk.php.net/manual/zh_cn/ ... lation.windows.html2 T; s/ d! T5 r) @! u& _3 {* W2 k4 

X6 d4 ^
; b' _# q( ?9 e5 O; _
=============
5 M; D( d+ m. c! ~. F; y1 a/ RWinBinder 让phper 可以在window 系统开发桌面软件
/ a3 d4 t, ?" {1 i+ ~/ y5 Y' D$ d7 z/ {* E
WinBinder 是一种开源的 PHP 动态扩展(.dll) ,也算是脚本编程语言,为php 在window 下的开发提供用户界面UI ,它负责调用window 的

API 接口。其运行 PHP 程序员轻松地使用 PHP 创建 Windows 应用程序。当然,这个只能在 Windows 下运行。本身是一个软件,php 程序员

可以通过这个软件开发界面。官方网站说得很不错,无须编译php. 只要保存文件扩展为.phpw ,然后用 php.exe 打开就可以运行。具体开发

感受如何,要试验一下才知道。初步感觉不会比php-gtk 差。
) f- l. e* e" p9 q* p. ]
$ o6 ~; k, c. u) R& r  y; L可以在此处下载到 WinBinder 的包 , 下那个 .zip 包,一般不需要用 .exe 的。下完之后解压缩,将 

winbinder_xxx\PHP\PHP4\ext 目录下的(如果用的是 PHP5 则复制 PHP5 目录下的) php_winbinder.dll 复制到 PHP 扩展目录下,一般在 

C:\php\extensions ,然后修改 php.ini 文件,加上:/ ^( X) X; [+ i' C$ s

& K( @8 P( r' J& eextension=php_winbinder.dll
' h: E' ^2 G1 }+ Y. l# M- N$ m" {' z3 @
然后到打开命令行(cmd ),进入到 winbinder_xxx\Code\Samples 目录下,运行:# ^) h$ L" }) I' E) O  O
  o+ a' f4 k- P, e/ ?
C:phpcliphp.exe manytests_main.phpw
  Z$ j0 b3 f$ q4 m7 ^. m% t, ~
' t- O5 h, g+ ]这样就可以看到 Windows 窗口了,测试用的例子很多,可以都试试。我试了一下中文,还是支持得不错的,想想也是,

WinBinder 是通过扩展的方式,加载到 PHP 中,其调用的都是 Windows 的 APIs 。实际上可以将 WinBinder 分为两层,一层是底层,叫 

API 层,作为 PHP 扩展直接连接 Windows 的 API ,并为第二层(高层,叫 PHP 层)提供统一的调用接口。3 V: L. }+ V5 u% [/ ]" t& s3 

d
7 P5 m8 z9 L0 f
Hello, world 代码示例( S4 F" Z: a& x

7 x# }  K9 y" k6 I$ B<?php8 s7 q$ c  ~2 Y0 y' v' i6 J
include("../inc/winbinder.php");                                // 包含 WinBinder PHP 库文件
5 n) l3 D2 U  a  qwb_create_window(NULL, PopupWindow, "Hello world!", 480, 320); // 创建 Windows 应用程序
; }4 |& T% y2 H# Z0 uwb_main_loop();                                                 // 进入消息循环! l) o1 i2 D$ Y" M5 {5 

c# a0 J
?>