はじめに
PHPというと、Webアプリケーションを作成するためのサーバーサイド言語として既に有名ですが、PHP-GTK2というエクステンションを利用すると、PHPでデスクトップ上で動作するアプリケーションを作成できるようになります。本稿では、このPHP-GTK2を使用してデスクトップ用簡易電卓を作成してみます。
対象読者
PHPでデスクトップアプリケーションを作ってみたい方
環境構築
対象OSは、LinuxとWindowsです。
PHP-GTK2は、PHP-GTKのサイトより無償でダウンロードできます。
Windowsの場合、「php-gtk-2.xx.xx-win32-nts.zip」というファイルをダウンロードし解凍すると、「php-gtk2」というフォルダができますので、中の設定ファイル「php-cli.ini」をメモ帳など開きます。ファイルの65行目あたりに文字コードを指定している部分があるので、php-gtk.codepage = CP1250をphp-gtk.codepage = SJIS に変更し、日本語を使えるようにしましょう。
以上で基本的な設定は終了です。
サンプルプログラム「簡易電卓」
それではPHP-GTK2を使って、簡易電卓を作成してみましょう。以下にソースを示します。
<?php
class Calc{
private $txt1;
private $txt2;
private $txt3;
private $tbl;
private $hbox;
private $wnd;
private $combo;
private $calc_btn;
public function __construct(){
//数字入力用テキストボックスを初期化
$this->txt1 = new GtkEntry();
$this->txt2 = new GtkEntry();
//解答表示用テキストボックス初期化
$this->txt3 = new GtkEntry();
//各テキストボックスの幅を調節
$this->txt1->set_width_chars(6);
$this->txt2->set_width_chars(6);
$this->txt3->set_width_chars(6);
//演算子選択コンボボックスを初期化
$this->combo = GtkComboBox::new_text();
$this->combo->insert_text(0,"+");
$this->combo->insert_text(1,"-");
$this->combo->insert_text(2,"×");
$this->combo->insert_text(3,"÷");
//"+"が初期表示されるようにする
$this->combo->set_active(0);
//計算ボタンを初期化
$this->calc_btn = new GtkButton("=");
//イベントリスナーを割り当て
$this->calc_btn->connect_simple("clicked",array($this,"calc_handler"));
//テーブルを初期化
$this->tbl = new GtkTable(1, 5);
//テーブルに各コンポーネントを配置
$this->tbl->attach($this->txt1 ,0,1,0,1);
$this->tbl->attach($this->combo ,1,2,0,1);
$this->tbl->attach($this->txt2 ,2,3,0,1);
$this->tbl->attach($this->calc_btn,3,4,0,1);
$this->tbl->attach($this->txt3 ,4,5,0,1);
$this->hbox = new GtkHBox();
$this->hbox->pack_start($this->tbl);
$this->wnd = new GtkWindow();
$this->wnd->add($this->hbox);
$this->wnd->set_title("PHP計算機");
$this->wnd->show_all();
Gtk::main();
}
public function calc_handler(){
$num1 = doubleval($this->txt1->get_text());
$num2 = doubleval($this->txt2->get_text());
switch($this->combo->get_active()){
//足し算
case 0:
$this->txt3->set_text($num1 + $num2);
break;
//引き算
case 1:
$this->txt3->set_text($num1 - $num2);
break;
//掛け算
case 2:
$this->txt3->set_text($num1 * $num2);
break;
//割り算
default:
$this->txt3->set_text($num1 / $num2);
}
}
}
//Calcクラスのインスタンスを生成
$calc = new Calc();
?>
