工作需要窘茁,所以從php GUI開始躯畴。
GUI簡介
官方簡介:這個(gè)擴(kuò)展包讓libui為跨平臺(tái)開發(fā)原生的外觀和感覺用戶界面提供了一個(gè)面向?qū)ο蟮腁PI爵政。
我這個(gè)翻譯確實(shí)有點(diǎn)兒尬及汉,反正不是重點(diǎn)稠炬。
重點(diǎn)是這個(gè)GUI庫僅支持PHP7哦
據(jù)說呢焕阿,這個(gè)UI原先是一個(gè)牛人andlabs用C寫的libui 給他的Go UI 界面庫用的,后來被PHP引用了首启。
我來試著搞定這個(gè)東西暮屡,萊茨狗~
GUI 安裝/配置
我開發(fā)用的php版本是php7.0.17 NTS
先不看官方文檔,但是mark一下:https://secure.php.net/manual/zh/book.ui.php
找了一年前一位前輩的帖子起手毅桃,他把壓縮包附帶的幾個(gè)游戲放在github了褒纲,有興趣可以看一下:
視線回來准夷!敲黑板了
先下載擴(kuò)展:https://pecl.php.net/package/ui?境外網(wǎng)請(qǐng)自覺開啟藍(lán)燈。
我選擇了Release 2.0.0 PHP7.0 NTS X64莺掠,解壓后是三個(gè)dll文件衫嵌。
將?php_ui.dll?復(fù)制到 PHP 的?ext?目錄下,?
其余兩個(gè)文件?libui.dll?和?pthreadVC2.dll?放到 PHP 的根目錄下掖棉,也就是與?php.exe?的同級(jí)目錄墓律。
解壓包里除了dll還有三個(gè)寫好的游戲,我們測試下擴(kuò)展是否可用:
ok帕棉,失敗了针肥,什么都沒打開,我來看看官方文檔香伴。
在php.ini中把擴(kuò)展加進(jìn)去慰枕。
GUI 寫個(gè)小程序
還沒去翻官方文檔,先引用大神的小項(xiàng)目試手@懷素真
use?UI\Window;
use?UI\Size;
use?UI\Controls\Entry;
use?UI\Controls\Label;
use?UI\Controls\Button;
use?UI\Controls\Grid;
//創(chuàng)建一個(gè)窗口
//參數(shù)一表示窗口標(biāo)題
//參數(shù)二表示窗口大小
//參數(shù)三表示是否顯示菜單
$win?=?new?Window('簡單的計(jì)算器',?new?Size(640, 480), true);
//創(chuàng)建一個(gè)文本框
//Entry::Normal 普通單行文本框
//Entry::Password 密碼框
//Entry::Search 搜索框
$num1?=?new?Entry(Entry::Normal);
$num2?=?new?Entry(Entry::Normal);
$ret?=?new?Entry(Entry::Normal);
//創(chuàng)建一個(gè)標(biāo)簽
$lab?=?new?Label('+');
//創(chuàng)建一個(gè)按鈕
$btn?=?new?class('計(jì)算')?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);
????}
};
//創(chuàng)建一個(gè)網(wǎng)格
$grid?=?new?Grid();
//把上面的控件加入到網(wǎng)格布局中
$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();
下面這個(gè)小程序mark一下即纲,可以參考下寫法具帮。
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;
//創(chuàng)建一個(gè)窗口
//參數(shù)一表示窗口標(biāo)題
//參數(shù)二表示窗口大小
//參數(shù)三表示是否顯示菜單
$win?=?new?Window('簡單的計(jì)算器',?new?Size(640, 480), true);
//創(chuàng)建一個(gè)表單
$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);
//愛好(多選)
//創(chuàng)建一個(gè)盒子,水平排列
$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);
//地區(qū)(下拉框)
$area?=?new?Combo();
$area->append("北京");
$area->append("上海");
$area->append("武漢");
$frm->append('地區(qū):',?$area, false);
//簡介(多行文本)
$desc?=?new?MultilineEntry();
$frm->append('簡介:',?$desc, false);
//注冊(cè)按鈕
$reg?=?new?class('注冊(cè)',?$win)?extends?Button {
????protected?$win;
????public?function?__construct($text,?$win) {
????????$this->win =?$win;
????????parent::__construct($text);
????}
????//用于重寫父類的單擊事件
????protected?function?onClick() {
????????$this->win->msg('消息',?'你點(diǎn)擊了注冊(cè)按鈕');
????}
};
$frm->append('',?$reg);
$win->add($frm);
//顯示窗口
$win->show();
UI\run();