# PHP GTK 简介

> 原文： [http://zetcode.com/gui/phpgtktutorial/introduction/](http://zetcode.com/gui/phpgtktutorial/introduction/)

在 PHP GTK 编程教程的这一部分中，我们将介绍 GTK 库并使用 PHP 编程语言创建第一个程序。

本教程的目的是使您开始使用 GTK 和 PHP。 GTK 是用于创建图形用户界面的领先工具包之一。 PHP 是服务器端 Web 开发中使用的非常流行的脚本语言。 它也可以用于通过 PHP CLI，PHP 命令行界面创建命令行脚本。

## PHP-GTK

PHP-GTK 是 PHP 编写 GTK 应用的语言绑定。 PHP-GTK 为 GTK 类和函数提供了一个面向对象的接口。 该项目的主页位于 [gtk.php.net](http://gtk.php.net/) 上。 在那里我们找到了参考文档。

为了运行示例，我们需要安装 PHP-CLI，PHP-GTK 和用于 PHP 的 Cairo。

## 安装

在撰写本教程时，在 Linux 上安装 PHP-GTK 存在问题。 （将在专门介绍用 Cairo 进行绘图的章节中说明为 PHP 安装 Cairo。）

以下是必需的软件包：

```php
build-essential subversion php5-cli php5-dev libgtk2.0-dev libglade2-dev

```

如果您没有这些之一，则必须安装它们。

```php
svn co http://svn.php.net/repository/gtk/php-gtk/trunk php-gtk

```

现在，从 Subversion 树中下载源代码。 不要使用源压缩文件。 这些说明适用于 Subversion 仓库中的源。

```php
./buildconf
./configure
make
sudo make install

```

这些是用于构建 PHP-GTK 的命令。 但是，在此过程中我们可能会遇到问题。 这是由于过去 libtool 的更改。

```php
./configure: line 11641: LTOPTIONS_VERSION: command not found
./configure: line 11642: LTSUGAR_VERSION: command not found
./configure: line 11643: LTVERSION_VERSION: command not found
./configure: line 11644: LTOBSOLETE_VERSION: command not foun

```

配置脚本给出错误消息。

```php
$ pwd
/home/vronskij/Downloads/php-gtk
$ cat /usr/share/aclocal/ltoptions.m4 /usr/share/aclocal/ltversion.m4 \
    /usr/share/aclocal/ltsugar.m4 /usr/share/aclocal/lt~obsolete.m4 >> aclocal.m4

```

现在在构建目录中，发出上面的命令。 我们的目录中将有一个新文件`aclocal.m4`。 （可在 [ubuntuforums.org](http://ubuntuforums.org/showthread.php?t=1377395) 上找到提示。）希望现在可以运行配置脚本。

```php
extension=php_gtk2.so

```

最后一步是编辑`php.ini`文件，并将以上行添加到“动态扩展”部分下。

## 简单的例子

既然我们已经成功安装了 PHP-GTK 库，我们可以从一个小例子开始。 在此示例中，我们创建一个简单的窗口。 窗口在屏幕上居中。

```php
<?php

/* 
ZetCode PHP GTK tutorial

This program centers a window on 
the screen.

author: Jan Bodnar
website: www.zetcode.com
last modified: September 2011
*/

class Example extends GtkWindow { 

    public function __construct() { 

        parent::__construct(); 

        $this->set_title('Simple'); 
        $this->set_default_size(250, 150); 

        $this->connect_simple('destroy', array('gtk', 'main_quit')); 

        $this->set_position(GTK::WIN_POS_CENTER);
        $this->show(); 
    } 
} 

new Example(); 
Gtk::main(); 
?>

```

本示例在屏幕中央显示一个`250x150`像素的窗口。

```php
class Example extends GtkWindow { 

```

`Example`类基于`GtkWindow`小部件。

```php
$this->set_title('Simple'); 

```

`set_title()`方法设置窗口的标题。

```php
$this->set_default_size(250, 150); 

```

此行设置窗口的大小。 它将是 250px 宽和 150px 高。

```php
$this->connect_simple('destroy', array('gtk', 'main_quit')); 

```

在这里，我们将`destroy`信号连接到回调。 `main_quit()`方法永久退出该应用。 单击标题栏中的关闭按钮，或按 `Alt + F4` 时，会发出破坏信号。

```php
$this->set_position(GTK::WIN_POS_CENTER);

```

这条线使窗口在屏幕上居中。

```php
$this->show();

```

一切准备就绪后，我们在屏幕上显示窗口。

```php
new Example(); 
Gtk::main(); 

```

我们设置了应用。 创建无限循环。 从这一点开始，应用就坐下来，等待用户或系统的外部事件。 循环一直运行到终止为止。

![Simple](img/6d6ca178d259cc9240dd6cd662417447.jpg)

图：简单

## 创建工具提示

第二个示例将显示一个工具提示。 工具提示是一个小的矩形窗口，它提供有关对象的简短信息。 它通常是一个 GUI 组件。 它是应用帮助系统的一部分。

```php
<?php

/* 
ZetCode PHP GTK tutorial

This code shows a tooltip on 
a window and a button.

author: Jan Bodnar
website: www.zetcode.com
last modified: September 2011
*/

class Example extends GtkWindow { 

    public function __construct() { 

        parent::__construct(); 

        $this->init_ui();

    } 

    public function init_ui() {

        $this->set_title('Tooltips');         
        $this->connect_simple('destroy', array('gtk', 'main_quit')); 

        $fixed = new GtkFixed();
        $this->add($fixed);

        $button = new GtkButton("Button");
        $button->set_size_request(80, 35);
        $button->set_tooltip_text("Button widget");

        $fixed->put($button, 50, 50);

        $this->set_tooltip_text("Window widget");

        $this->set_default_size(250, 150); 
        $this->set_position(GTK::WIN_POS_CENTER);
        $this->show_all();         
    }
} 

new Example(); 
Gtk::main();

?>

```

该示例创建一个窗口。 如果将鼠标指针悬停在窗口区域上方，则会弹出一个工具提示。

```php
$this->init_ui();

```

接口的创建委托给`init_ui()`方法。

```php
$fixed = new GtkFixed();
$this->add($fixed);

```

`GtkFixed`是一个容器窗口小部件，用于将窗口小部件定位在绝对坐标上。 第二行将此容器设置为示例的`GtkWindow`。 一扇窗口有一个中央容器。

```php
$button->set_tooltip_text("Button widget");

```

我们使用`set_tooltip_text()`方法设置按钮的工具提示。

```php
$this->set_tooltip_text("Window widget");

```

我们为窗口设置工具提示。 通过`$this`变量访问该窗口。

```php
$this->show_all(); 

```

当窗口上有多个小部件时，我们有两个选择。 在所有小部件上调用`show()`，或调用`show_all()`（显示容器及其所有子代）。

![Tooltips](img/398758dc5322ed93ba3047bac64df214.jpg)

图：工具提示 s

## 退出按钮

在本节的最后一个示例中，我们将创建一个退出按钮。 当我们按下此按钮时，应用终止。

```php
<?php

/* 
ZetCode PHP GTK tutorial

This program creates a quit
button. When we press the button,
the application terminates. 

author: Jan Bodnar
website: www.zetcode.com
last modified: September 2011
*/

class Example extends GtkWindow { 

    public function __construct() { 

        parent::__construct(); 

        $this->init_ui();

    } 

    public function init_ui() {

        $this->set_title('Quit button');         
        $this->connect_simple('destroy', array('gtk', 'main_quit')); 

        $fixed = new GtkFixed();
        $this->add($fixed);

        $button = new GtkButton("Quit");
        $button->set_size_request(80, 35);
        $button->connect_simple('clicked', array('gtk', 'main_quit'));

        $fixed->put($button, 50, 50);

        $this->set_default_size(250, 150); 
        $this->set_position(GTK::WIN_POS_CENTER);
        $this->show_all();         
    }
} 

new Example(); 
Gtk::main();

?>

```

示例的源代码。

```php
$button = new GtkButton("Quit");

```

在这里，我们创建一个按钮小部件。 构造函数的参数是按钮的标签。

```php
$button->set_size_request(80, 35);

```

我们设置按钮的大小。

```php
$button->connect_simple('clicked', array('gtk', 'main_quit'));

```

我们将`main_quit()`方法插入按钮点击信号。

```php
$fixed->put($button, 50, 50);

```

我们将退出按钮放入`x = 50`，`y = 50`的固定容器中。

本节介绍了使用 PHP 语言的 GTK 库。