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伪造referer实例代码
Sep 20 PHP
PHP 基本语法格式
Dec 15 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
Jun 07 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
Yii分页用法实例详解
Dec 04 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
php json转换相关知识(小结)
Dec 21 PHP
PHP抽象类基本用法示例
Dec 28 PHP
PHP的PDO预定义常量讲解
Jan 24 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 30 PHP
安装docker和docker-compose实例详解
Jul 30 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
Array of country list in PHP with Zend Framework
2011/10/17 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
更正确的asp冒泡排序
2007/05/24 Javascript
input 输入框内的输入事件详细分析
2010/03/17 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
js里面的变量范围分享
2020/07/18 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
《望洞庭》教学反思
2014/02/16 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
外语专业毕业生自荐信
2014/04/14 职场文书
专题组织生活会方案
2014/06/15 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js