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 相关文章推荐
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
使用TinyButStrong模板引擎来做WEB开发
Mar 16 PHP
PHP Mysql编程之高级技巧
Aug 27 PHP
关于php连接mssql:pdo odbc sql server
Jul 20 PHP
php生成EAN_13标准条形码实例
Nov 13 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
PHP Filter过滤器全面解析
Aug 09 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 PHP
PHP基于PDO扩展操作mysql数据库示例
Dec 24 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 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
使用sockets:从新闻组中获取文章(二)
2006/10/09 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
vue.js的安装方法
2017/05/12 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
深入解读Python解析XML的几种方式
2016/02/16 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
Python判断两个对象相等的原理
2017/12/12 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
你对IPv6了解程度
2016/02/09 面试题
金融专业毕业生推荐信
2013/11/26 职场文书
《在家里》教后反思
2014/03/01 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
机械专业求职信
2014/05/25 职场文书
慰问信格式
2015/02/14 职场文书
电影红河谷观后感
2015/06/11 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
python内置进制转换函数的操作
2021/06/02 Python