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.php和http://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 ?> |