1. PHP-GTK介绍 1.1 PHP-GTK PHP-GTK是PHP的延伸模组,它可以让程式设计师写出在客户端执行的、且独立的GUI的程式。这个模组不允许在浏览器上显视GTK+的程式,它一开始就是开发来写独立的GUI程式的。 1.2 GTK GTK原本是为GIMP,一个GUI的影像处理软体而开发的。GTK+是GIMP的套装工具。GTK+从这里开始发展,直到现在已经成为Gnome的中心(Gnome是一个桌面环境)。後来GTK+也已经被推广到BeOS和Win32,使得它成为PHP延伸模组的最佳选择,维持PHP可以跨平台并可以用PHP为Linux,BeOS,Windows等平台开发视窗介面的程式。 2. PHP-GTK概念 2.1 前言 接下来就要教各位一点点比较观念性的东西罗┅因为这章的概念都是非常重要的,所以就算不懂,也还是要慢慢的看懂它,不然┅以後就┅。还有,接下来的内容不建议没有程式设计经验的读者阅读,因为有很多的观念很容易会搞不清楚。还有,接下来该用英文的部分我都会用英文,这样大家在看国外文件的时候才不会不知所措,加油吧!!如果对本章有任何不懂之处,请自行查阅 PHP-GTK Manual:http://gtk.php.net/manual/en/ 2.2 Widget(s) Widget是一个GUI程式中基本的functions和forms。最常用的几个Widget是:label、button、window、frame和text box。所有的widget都是来自於一个抽象的基本class─GtkWidget。每个widget都是一个class 一个Widget一生大概都有五个时期: 1. 建立(Creation):宣告一个物件(declaring an object) 2. 放置(Placement):将它加入一个容器中(adding it to a container) 3. 信号连接(Signal Connection):接收信号以及进行动作(the action it will perform) 4. 显示(Display):它是否是可见的(whether it is viewable or not) 5. 删除(Destruction):关闭程式(closing of a program) 2.3 Container(s) Container是一个可以包含其他widget的widget。大部分的widget都是container,例如:GtkWindow、GtkTable和GtkBox。除了这点之外,container跟其他的widget没两样,也可以被放到其他container去。而所有的container都是来自於一个class─GtkContainer,本身来自於GtkWidget的class。所以container也是widget的一种。 2.4 Signal(s) 当程式设计师在程式中做了一个动作时,程式需要有一个动作来回应使用者的动作。Signals使程式可以知道使用者做了动作并可以触发适合的回应。 例如,当使用者按了一个可以开新视窗的按钮(GtkButton),程式认出这个请求,於是就开了一个新的视窗。这件事可以经由signal来做到。当按钮按下去之後,会使widget发出一个signal,接着再由该signal触发callbacks,产生一个新的视窗(GtkWindow)。 2.5 Callback(s) Callback就是当signal送出之後,被signal唤起的function。Callback会执行function传回一个值或是做一个动作。Callback就是signal的handler funciton。它可以是该signal的预设handler或着是程式设计师定义的function。要建立一个callback,就必须把function connect 到 signal。 2.6 Signal Inheritance(继承) 和methods一样,signals可以被物件继承。一个widget可以送出任何它的parent widget可以送出的还有它自己特有的signal。 2.7 Connecting Signals 你必须为PHP-GTK指定一个callback function当signal送出时来对signal做回应。把一个signal连接到一个function可以用connect() 这个object 方法达成。 如下: connect("destroy", "shutdown"); //建立一个GtkButton,按钮文字为"按我" $button = &new GtkButton("按我"); $button->connect("clicked", "you_clicked"); //把GtkButton放到是container的GtkWindow中 $window->add($button); //显示$window以及它的所有child widget $window->show_all(); //进入程式主回圈(即程式启动之意) gtk::main(); ?> 执行它的话,就会出现一个视窗,里面有一个写着"按我"的按钮,按下按钮程式就会执行you_clicked函式。在这个程式中,$window物件的"destroy" signal是在使用者按下视窗右上角的"X"时会送出的;而$button物件的"clicked" signal是在使用者按下该按钮的时候会送出的。最後那一行的gtk::main() 是一定要执行的,这样才能告诉电脑要开始执行程式,既然有开始执行,那就一定有停止吧? 没错,用gtk::main_quit() 就可以停止程式了。 看完了以上的范例,有些读者可能会有疑问「如果我想执行送出signal的widget之外的widget的method怎么办?」,这时候,就要用另一个method了 a connect_object(),它可以跨物件呼叫方法或是传递其他物件做为function的叁数。跨物件呼叫方法如下: $window->connect_object("destroy", array("gtk","main_quit")) 如此,在$window物件的"destroy" signal送出的时候就会唤起gtk::main_quit()这个方法,程式就会终指执行。 在介绍连接方法的最後,再提一下connect() 和 connect_object() 的自订增加要传给callback function的叁数的办法。见例子: connect("clicked","who_are_you",$parameter); $button2 = &new GtkButton("测试二"); //将"clicked" signal连接到kill_the_button1函式,附加叁数$button1 $button2->connect_object("clicked","kill_the_button1",$button1); function who_are_you($widget,$parameter){ echo $parameter; } function kill_the_button($button){ $button->destroy(); } ?> 注意那两个function,who_are_you有两个叁数对吧? 第一个是做什么用的呢?为什么它会自动出现?? 因为,每个signal的callback function都会因为signal的不同而加上一些内定一定会传入callback function的叁数,而基本上所有的signal都至少会传给callback function一个叁数a产生该signal的物件。所以who_are_you的第一个叁数就是$button1,而第二个就是$parameter,也就是新超人。那kill_the_button函式就不一样罗~ 因为connect_object()函式会呼略原本signal的callback function的预设叁数,所以kill_the_button就只有附加在connect_object最後的$button1叁数了,如此,kill_the_button就可以呼叫$button1的方法或是取得它的属性,这里呼叫了$button1的destroy方法,於是$button1就会被消灭。 2.8 Event(s) Event是signal的一种,但是它的用途还有功能都非常强大。就signal来说,signal这种东西都是内建在widget上的,所以,例如GtkWindow没有"clicked"signal,那么在不用event signal的情况下,GtkWindow是决对不可能送出clicked之类的signal的。那如果用了event signal呢? Event signal是可以允许被加到任何的widget上的,所以就算这个widget本来没有发出"clicked"signal的功能,你也可以用add_events() 来为它加上按了它之後event signal会做什么样的反应。而event signal中包含的资讯比较多,比如说当你在使用"key-press-event"这个event signal的时候,同时也会记录到你按下的是什么按键,於是通常event signal的callback function格式内定会有两个叁数,第一个依然是送出signal的widget,而第二个就是$event,这个$event是一个class,里面的属性和方法会因为送过来的event signal种类而不同。就"key-press-event"传回的$event class来说,里面有一个属性是keyval,内容就是使用者按的是哪一个键。这些对於一个程式设计师来说常常是很有用的资讯。所以event的重要性是不可忽视的,就算刚开始会有点不懂,也要慢慢的融入才行。这一节也非常重要。 3. 安装PHP-GTK 3.1 在Windows系统下安装 首先要从http://gtk.php.net/download.php下载...HP-GTK的windows binary档案(本文撰写时为0.5.1版)。 接着来看看PHP-GTK 0.5.1 binary档的内容: php4 → php 和 php-gtk binary 档案 winnt → 预设的php.ini档案 winntsystem32 → gtk binaries used by extension test → 几个测试用的档案 README.txt → 安装说明档 开始安装: 1. 复制 php4 的内容到你的php安装目录下(例C:php)。 2. 复制 winnt 的内容到你的winnt资料夹。在Windows NT或Windows2000上是C:winnt,在Window95、98、xp上是C:windows。如果该资料夹里已经有 php.ini,那就不用做这个动作。 3. 复制 winntsystem32 的内容到你的winntsystem32资料夹。在Windows NT或Windows2000上是C:winntsystem32,在Window95、98、xp上是C:windowssystem32。 4. 复制 test 的内容到你想要执行你的script的地方(此步骤非必要)。 如何执行PHP-GTK程式: PHP-GTK程式可以在「开始」-「执行」下输入指令(或是建立捷径)来启动,如:C:phpphp -q c:phptestgtk.php ## 表示不送印出 HTTP Header,但一直使用这个视窗,直到关闭程式。 C:phpphp -q -c php.ini c:gtk.php ## 同上,但执行指定的php.ini设定。 C:phpphp C:phptestgtk.php ## 表示会送印出 HTTP Header,但一直使 用这个视窗,直到关闭程序 C:phpphp_win C:phptestgtk.php ## 表示不使用视窗,执行後独立一个执行程式,他是使用 php -q模式,但是只要output出任何字元,例如错误讯息,就会停止执行。 3.2 在UNIX系统下安装 Debian的使用者可以在 http://www.debian.org 下载PHP-GTK的binary档。系统需求须已安装下列package: PHP 4.1.0 或之後的版本,必须是编为CGI binary(command-line) 版本,包含所有的header files和devlement scripts。 PHP-GTK支援GTK+ v1.2而需要安装1.2.6以上版本的GTK+。GTK+ v2.0还未被支援,必须等到它开发完成并

wapi这个名词用户们可能在使用网络得时候见到过,但是对于一部分人来说肯定都不知道wapi是什么,下面就带来了详细介绍,帮助不知道小伙伴去了解。wapi是什么东西:答:wapi是无线局域网鉴别和保密的基础结构。这就像红外线和蓝牙等功能一样,一般都覆盖在办公楼等地方的附近。基本都是为一个小部门所有的,所以这个功能涉及的范围只有几公里。wapi相关介绍:1、wapi是无线局域网里面的一种传输协议。2、这款技术是可以去避免窄频带通信的问题,可以更好的去进行传播。3、仅仅只需要一个代码就可以去传送信号了

pubg又称绝地求生,是一款非常经典的射击大逃杀类型游戏,从2016年火爆以来一直拥有非常多的玩家。在最近的win11系统推出后,就有不少玩家想要在win11上游玩它,下面就跟着小编来看看win11是否可以玩pubg吧。win11能玩pubg吗:答:win11可以玩pubg。1、在win11推出之初,因为win11需要开启tpm的缘故,所以导致很多玩家被pubg封号处理了。2、不过后来根据玩家的反馈,蓝洞方面已经解决了这个问题,目前已经可以在win11中正常玩pubg了。3、如果大家遇到了pub

Python函数介绍:exec函数的介绍及示例引言:在Python中,exec是一种内置函数,它用于执行存储在字符串或文件中的Python代码。exec函数提供了一种动态执行代码的方式,使得程序可以在运行时根据需要生成、修改和执行代码。本文将介绍exec函数的使用方法,并给出一些实际的代码示例。exec函数的使用方法:exec函数的基本语法如下所示:exec

i5是英特尔旗下的一系列处理器,拥有到现在11代i5的各种不同版本,每一代都有着不同性能。因此对于i5处理器是否能够安装win11,还需要看是第几代的处理器,下面就跟着小编一起来分别了解一下吧。i5处理器能装win11吗:答:i5处理器能装win11。一、第八代及之后的i51、第八代及后续的i5处理器是能够满足微软的最低配置需求的。2、因此我们只需要进入微软网站,下载一个“win11安装助手”3、下载完成后,运行该安装助手,根据提示进行操作就可以安装win11了。二、第八代之前的i51、第八代之

在如今快捷的生活,为了提高工作效率,快捷键是必不可少的工作需求。快捷键是指按键或按键组合,可提供另一种方式来执行通常使用鼠标执行的操作。那么edge快捷键有哪些呢?edge快捷键的功能又有哪些呢?下面小编整理了一份edge快捷键的介绍,感兴趣的朋友们快来看看吧!Ctrl+D:将当前页面添加到收藏夹或阅读列表Ctrl+E:在地址栏中执行搜索查询Ctrl+F:在页面上查找Ctrl+H:打开历史记录面板Ctrl+G:打开阅读列表面板Ctrl+I:打开收藏夹列表面板(测试好像不起作用)Ctrl+J:打开

很多用户在电脑上安装了打印机驱动程序,但却不知道如何找到它们。因此,今天我为大家带来了详细介绍打印机驱动程序在电脑中的位置,对于还不了解的用户,快来看看吧打印机驱动在电脑哪里找重新撰写内容而不改变原义时,需要将语言改写为中文,不需要出现原句首先,建议使用第三方软件进行搜索2、在右上角找到"工具箱"3、在下方找到并点击“设备管理器”。改写后的句子:3、在底部找到并点击“设备管理器”4、然后打开“打印队列”,然后找到你的打印机设备。此次是你的打印机名称型号。5、右键打印机设备,就能够去更新或者卸载我

在微软公司发布了win10系统之后,我们所知的就有好几种版本:家庭版、教育版、专业版、旗舰版等等。小编认为这些版本在性能上没什么差别,只是有些针对性的功能不同。那么小编今天就来跟大家聊一聊玩游戏用win10哪个版本最好吧~希望可以帮助到你。玩游戏用win10哪个版本最好答:玩游戏来说,这几个版本其实区别并不大。如果只是想要拿来打游戏的话,推荐win10家庭版。因为家庭版没有其他花里胡哨的功能,能够让性能主要集中在游戏方面。这个问题,首先要说的就是win10几个版本之间的区别。1、win10主要版

PHP函数介绍:strtr()函数在PHP编程中,strtr()函数是一个非常有用的字符串替换函数。它用于将字符串中的指定字符或字符串替换为其他字符或字符串。本文将介绍strtr()函数的用法,并给出一些具体的代码示例。strtr()函数的基本语法如下:strtr(string$str,array$replace)其中,$str是要进行替换操作的原始字


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境