PHP通常是做为服务器端脚本执行,如果告诉你PHP可以编写普通的GUI程序,你应该很感兴趣.下面介绍的PHP-GTK就是PHP的GUI扩展.GTK是一个业界标准的图形库,具有良好的移植性.如果你用过linux的gnome桌面环境,对它应该不会陌生,Gnome就是在KDE遇到Qt许可证障碍后发展的自由软件,GTK则是其采用的图形库。

PHP-GTK采用的是组件思想(可见组件思想几十年前就有了),为此不能不提到tcl/tk语言。

Tcl/Tk 的发明人 John Ousterhout 教授在八十年代初,是伯克利大学的教授。在其教学过程中,他发现在集成电路 CAD 设计中,很多时间是花在编程建立测试环境上。并且,环境一旦发生了变化,就要重新修改代码以适应。这种费力而又低效的方法,迫使 Ousterhout 教授力图寻找一种新的编程语言,它即要有好的代码可重用性,又要简单易学,这样就促成了Tcl (Tool Command Language) 语言的产生。TCL经常被用于 快速原型开发,脚本编程,GUI和测试等方面。

Tcl 最初的构想的是希望把编程按照基于组件的方法 (Component Approach),即与其为单个的应用程序编写成百上千行的程序代码,不如寻找一个种方法将程序分割成一个个小的, 具备一定“完整”功能的,可重复使用的组件。这些小的组件小到可以基本满足一些独立的应用程序的需求,其它部分可由这些小的组件功能基础上生成。不同的组件有不同的功能,用于不同的目的。并可为其它的应用程序所利用。当然, 这种语言还要有良好的扩展性, 以便用户为其增添新的功能模块。最后,需要用一种强的,灵活的“胶水”把这些组件“粘”合在一起, 使各个组件之间可互相“通信”,协同工作。程序设计有如拼图游戏一样,这种设计思想与后来的 Java 不谋而合。终于在1988 年的春天, 这种强大灵活的胶水 - Tcl 语言被发明出来了。

按照 Ousterhout 教授的定义,Tcl 是一种可嵌入的命令脚本化语言 (Command Script Language)。“可嵌入”是指把很多应用有效,无缝地集成在一起。

说起来也很类似于现在炒做的很热闹的.NET,.NET有一个IL,中间语言,你可以用合适的语言做组件,通过IL实现模块的衔接和重用。说白了,微软这个思想就是借鉴了十几年前的tcl/tk,只不过微软有钱可以做得更好而已。

这种结构的先进性不言而喻,有好的代码可重用性,简单易学,有良好的扩展性,可重用,执行效率比单纯的脚本高,功能也更强,解释语言,代码能够动态的改变,平台无关。Win32, UNIX, Mac 上都可以跑,代码紧凑,易于维护调试简单等等。这种方式为后来很多脚本语言采用,如python,perl 等,php脚本的天性也非常适合做这种扩展,php-gtk只是其扩展的一种。

PHP-GTK创始人Andrei Zmievski 回忆了 PHP-GTK 计划和创建的过程:

“我总是对 GUI 编程有着浓厚的兴趣。我发现 Gtk+ 是一个非常好的工具包。目睹了 PyGtk 和 GTK-Perl 的实现,我决定尝试 PHP 是否也能够被做成 Gtk+ 的接口。2000年8月,我有了更多的业余时间,于是我开始试验。我参考了 PyGtk 的实现方法,因为它有着相当完全的实现和漂亮的面向对象的接口。James Henstridge,PyG 的作者,在最初的筹备阶段提供了极大的帮助。

“手工写 Gtk+ 函数全部的接口几乎是不可能的事情,所以我把重点放在了代码生成上,就像 PyGtk 做的一样。代码生成器是一个PHP 程序,它可以读取包含 Gtk+ 类、常量和方法信息的一系列的 .defs 文件并生成与 PHP 相接口的 C 代码。无法自动生成的部分可以提交到 .overrides 文件。

“代码生成器和基础结构的工作花了我一定的时间,因为我在 2000 年秋天这段时间里只能花很少的时间在 PHP-GTK 上。在我把 PHP-GTK 给 Frank Kromann 演示过后,他产生了浓厚的兴趣,并开始帮助我完成代码生成器和 Win32 的实现。当我们写了第一个 Hello World 程序并设法使之工作之时,我们的喜悦之情溢于言表。两个多月后,这个工程初见成效,并于 2001 年 3 月 1 日发布了内部版本。

“感到 PHP-GTK 前景广阔,我便为它专门设置了邮件列表和 CVS 知识库。同时,gtk.php.net 网站也建立起来。”

一个简单的实例,更多的看安装包里面的 Demos。php-gtk 官方站点为 http://gtk.php.net,有在线手册供查询。目前 php-gtk 最高版本是 PHP-GTK2,还在进一步完善中。

可以从 http://gtk.php.net/download.php 下载一个完整的运行和测试软件包,在命令行下运行:

php demos/xxx.php

就可以测试里边带的演示程序。

相信第一次看到演示的人一定会大吃一惊:原来 PHP 真能开发 Win32 的 GUI 桌面程序呀!

以下是一个示例,保存成名为 mydemo.php 文件到 demos 文件夹中,运行命令:

C:/phpgtk2>php demos/mydemo.php

就会弹出一个小窗口,可以用鼠标拖拽改变它的大小,点击上面的按钮,窗口就关闭,然后在 DOS 窗口里输出“Hello World!”字符串。

用 PHP-GTK2 做 Win32 GUI 程序相关推荐

  1. 给Win32 GUI程序增加控制台窗口的方法

    给Win32 GUI程序增加控制台窗口的方法 2008年10月11日 星期六 下午 04:43 在Win32的GUI程序中,没有控制台窗口,我们输出调试信息时有些不方便,以往我的做法是使用Messag ...

  2. pythongui程序,python第一个GUI程序

    第一个GUI程序 截止目前,我们的python基本语法就已经讲完了,但是python的应用确实无比之广,不同的应用领域需要学习不同的Python库,比如爬虫的urllib模块,科学计算numpy模块, ...

  3. 深入浅出WPF(2)——解剖最简单的GUI程序

    深入浅出WPF(2)--解剖最简单的GUI程序 小序: 从这篇文章开始,我们进行XAML语言的上手学习.说实话,XAML这种语言一点也不难.如果把XML看成是"父类",那么XAML ...

  4. cmd无法运行python_通过Java-%1在cmd中运行python文件不是有效的Win32应用程序 - java...

    我正在尝试使用Java执行python代码.我的代码: public class PyTest { public static void main(String[] args) { Runtime.g ...

  5. win32项目和win32控制台程序的区别

    回答1: 1.win32应用程序是指窗口类的,像QQ之类的,有图形化界面,而控制台是指运行在黑框下的,像cmd之类的: 2.win32控制台项目指在32位Windows命令提示符(即所谓的dos)环境 ...

  6. putty和Xming server 结合完美在windows下显示linux GUI程序

    因为linux的x是c/s架构,顾直接putty访问执行不了图形程序,因为windows下缺少x server.当然可以用收费的xmanger的xshell来做,但是免费的Xming server也很 ...

  7. 纯 Win32 SDK程序为什么每次要获取设备描述表句柄

    做过Win32 API程序的就会发现,要对窗口输出时,每次都要获取设备描述表句柄:都是对同一个窗口输出,设备描述表是一个:为什么每次都要获取设备描述表句柄呢?获取一次行吗? 做一个Win32 API程 ...

  8. 《Abaqus GUI程序开发指南(Python语言)》——2.5 动态类型简介

    本节书摘来自异步社区<Abaqus GUI程序开发指南(Python语言)>一书中的第2章,第2.5节,作者: 贾利勇 , 富琛阳子 , 贺高 , 周正光 更多章节内容可以访问云栖社区&q ...

  9. 在Qt在GUI程序里显示控制台界面

    在GUI程序里有时我们想简单的打印些信息来进行测试,然而因为不是控制台程序,所以不能直接通过控制台输出,要实现这点就要做一下两点: 1:在.pro文件中加入一句: CONFIG+= console 2 ...

最新文章

  1. sprintf_s的使用
  2. javascript 窗口加载事件相关问题
  3. uniGUI试用笔记(二)
  4. highcharts纵坐标的格式化
  5. 时隔七个月,我终于弄懂了汉诺塔的思想
  6. Python --之练习题
  7. 原生安卓10怎么打开面部识别_《原创》安卓系统手机只需一步立即提速翻倍,越久的手机越见效...
  8. if js 判断成绩等级_Java判断语句的语法和使用
  9. Javascript获取地址参数
  10. Exchange Server 2013安装部署初体验
  11. DiskTool 无损分区软件 免费易用的中文版“无损分区魔术师”(完美支持Win7/32与64位系统)...
  12. 时间片轮转调度算法(Java)
  13. 尚学堂视频笔记四:常用类
  14. 问题 M: 【枚举】桐桐数
  15. 惠普CEO李艾科的“金刚钻儿”
  16. 区块链十年一梦:有人辞官归故里,有人星夜来赶考
  17. 【Cilium 1.10 重磅发布!】支持 Wireguard, BGP, Egress IP 网关, XDP 负载均衡, 阿里云集成
  18. Vue3生命周期函数的那些事
  19. MFC界面——实现分割与合并文件
  20. 利用Shell 脚本导出sql表格并邮寄发送

热门文章

  1. 计算机基础知识教程excel函数计算,计算机基础知识:Excel中的函数操作(四)...
  2. 游戏APP推荐,快来开启游戏时间
  3. 如何在网上回复负面评论
  4. 长度测试仪:可测量网线/电话线/光纤等的长度
  5. 测试iphone4电池的软件,iphone4电池容量 iphone4电池的更换【图文】
  6. 中国光学镜头行业营销趋势及盈利前景预测报告(新版)2022-2027年
  7. ae计算机没有该字体,【干货】自己动手,完美解决AE CC 2017/CC 2018/CC 2019字体问题CT generic: not ascii...
  8. 鲸鱼吞塑料袋解决之道:人类合作和可持续发展报告
  9. 吃大闸蟹 非得阳澄湖吗?
  10. Linux下终端分屏利器tmux