php7 图形用户界面GUI 开发示例


Posted in PHP onFebruary 22, 2020

本文实例讲述了php7 图形用户界面GUI 开发。分享给大家供大家参考,具体如下:

一、下载指定系统扩展

http://pecl.php.net/package/ui
http://pecl.php.net/package/ui/2.0.0/windows

由于我的系统是64位win10,php版本是7.1,所以选择7.1 Thread Safe (TS) x64,linux用户可以自行下载源码包,编译安装。

php7 图形用户界面GUI 开发示例

解压php_ui-2.0.0-7.1-ts-vc14-x64.zip,把php_ui.dll复制到你php.ini中extension_dir设置的目录,把libui.dll和pthreadVC2.dll复制到C:\Windows\System32目录下。

在php.ini中加入如下:

extension=php_ui.dll

然后重启服务,phpinfo()查看,ui扩展安装成功。

二、我们创建一个简单的计算器

<?php
use UI\Window;
use UI\Size;
use UI\Controls\Entry;
use UI\Controls\Label;
use UI\Controls\Button;
use UI\Controls\Grid;

//创建一个窗口
//参数一表示窗口标题
//参数二表示窗口大小
//参数三表示是否显示菜单
$win = new Window('简单的计算器', new Size(640, 480), true);

//创建一个文本框
//Entry::Normal 普通单行文本框
//Entry::Password 密码框
//Entry::Search 搜索框
$num1 = new Entry(Entry::Normal);
$num2 = new Entry(Entry::Normal);
$ret = new Entry(Entry::Normal);

//创建一个标签
$lab = new Label('+');

//创建一个按钮
$btn = new class('计算') extends Button {
  public function __construct($text) {
    parent::__construct($text);
  }

  protected function onClick() {
    global $num1, $num2, $ret;
    $n1 = $num1->getText();
    $n2 = $num2->getText();
    $ret->setText($n1 + $n2);
  }
};

//创建一个网格
$grid = new Grid();

//把上面的控件加入到网格布局中
$grid->append($num1, 0, 0, 1, 1, true, Grid::Center, false, Grid::Center);
$grid->append($lab, 0, 1, 1, 1, true, Grid::Center, false, Grid::Center);
$grid->append($num2, 0, 2, 1, 1, true, Grid::Center, false, Grid::Center);
$grid->append($btn, 0, 3, 1, 1, true, Grid::Center, false, Grid::Center);
$grid->append($ret, 0, 4, 1, 1, true, Grid::Center, false, Grid::Center);

//把布局加入到窗口中
$win->add($grid);

//显示窗口
$win->show();

UI\run();

在控制台下运行php脚本

> php index.php

运行结果如下:

php7 图形用户界面GUI 开发示例

三、我们创建一个常用的注册表单

<?php
use UI\Window;
use UI\Size;
use UI\Controls\Box;
use UI\Controls\Entry;
use UI\Controls\Button;
use UI\Controls\Form;
use UI\Controls\Radio;
use UI\Controls\Check;
use UI\Controls\Combo;
use UI\Controls\MultilineEntry;

//创建一个窗口
//参数一表示窗口标题
//参数二表示窗口大小
//参数三表示是否显示菜单
$win = new Window('简单的计算器', new Size(640, 480), true);

//创建一个表单
$frm = new Form();

//用户名
$user = new Entry(Entry::Normal);
$frm->append('用户名:', $user, false);

//密码
$pwd = new Entry(Entry::Password);
$frm->append('密码:', $pwd, false);

//性别(单选)
$sex = new Radio();
$sex->append("男");
$sex->append("女");
$sex->append("未知");
$frm->append('性别:', $sex, false);

//爱好(多选)
//创建一个盒子,水平排列
$loveBox = new Box(Box::Horizontal);
$love1 = new Check('看书');
$love2 = new Check('旅游');
$love3 = new Check('游戏');
//把多选控件加入盒子中
$loveBox->append($love1);
$loveBox->append($love2);
$loveBox->append($love3);
$frm->append('爱好:', $loveBox, false);

//地区(下拉框)
$area = new Combo();
$area->append("北京");
$area->append("上海");
$area->append("武汉");
$frm->append('地区:', $area, false);

//简介(多行文本)
$desc = new MultilineEntry();
$frm->append('简介:', $desc, false);

//注册按钮
$reg = new class('注册', $win) extends Button {
  protected $win;

  public function __construct($text, $win) {
    $this->win = $win;
    parent::__construct($text);
  }

  //用于重写父类的单击事件
  protected function onClick() {
    $this->win->msg('消息', '你点击了注册按钮');
  }
};
$frm->append('', $reg);

$win->add($frm);

//显示窗口
$win->show();

UI\run();

运行结果如下:

php7 图形用户界面GUI 开发示例

为了避免每次都要打命令运行php脚本,我们可以写个bat脚本来运行。

D:\amp\php7\php.exe -f D:\wwwroot\demo1\index.php
pause

注意php.exe的路径和运行脚本路径,保存为run.bat,运行结果如下:

php7 图形用户界面GUI 开发示例

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP中的cookie
Nov 26 PHP
简单的过滤字符串中的HTML标记
Dec 25 PHP
表单复选框向PHP传输数据的代码
Nov 13 PHP
简单的cookie计数器实现源码
Jun 07 PHP
PHP 输出URL的快捷方式示例代码
Sep 22 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
解决php表单重复提交实现方法
Sep 29 PHP
yii实现使用CUploadedFile上传文件的方法
Dec 28 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 PHP
php微信浏览器分享设置以及回调详解
Aug 01 PHP
PHP Swoole异步读取、写入文件操作示例
Oct 24 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 #PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 #PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 #PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 #PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 #PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 #PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 #PHP
You might like
php实现面包屑导航例子分享
2015/12/19 PHP
Yii2框架使用计划任务的方法
2016/05/25 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
javascript中的array数组使用技巧
2010/01/31 Javascript
javascript两段代码,两个小技巧
2010/02/04 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
js调用iframe实现打印页面内容的方法
2014/03/04 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
PHP7新特性简述
2017/06/11 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
[05:48]DOTA2英雄梦之声vol21 屠夫
2014/06/20 DOTA
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
Python中取整的几种方法小结
2017/01/06 Python
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
python正则实现提取电话功能
2018/02/24 Python
Python多进程原理与用法分析
2018/08/21 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
美国性感内衣店:Yandy
2018/06/12 全球购物
医学生自荐信
2013/12/03 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
聘用意向书范本
2014/04/01 职场文书