在 PHP GTK 编程教程的这一部分中,我们将介绍一些小部件。
小部件是 GUI 应用的基本构建块。 多年来,几个小部件已成为所有 OS 平台上所有工具包中的标准。 例如,按钮,复选框或滚动条。 GTK 工具箱的理念是将小部件的数量保持在最低水平。 将创建更多专门的窗口小部件作为定制 GTK 窗口小部件。
GtkCheckButton
GtkCheckButton是具有两种状态的窗口小部件:开和关。 接通状态通过复选标记显示。 它用来表示一些布尔属性。
<?php/*ZetCode PHP GTK tutorialThis program toggles the title of thewindow with the GtkCheckButton widget.author: Jan Bodnarwebsite: www.zetcode.comlast modified: August 2011*/class Example extends GtkWindow {public function __construct() {parent::__construct();$this->init_ui();}private function init_ui() {$this->set_title('Check button');$this->connect_simple('destroy', array('gtk', 'main_quit'));$fixed = new GtkFixed();$this->add($fixed);$cb = new GtkCheckButton("Show title");$cb->set_active(true);$cb->connect('clicked', array($this, 'on_clicked'));$fixed->put($cb, 50, 50);$this->set_default_size(250, 200);$this->set_position(GTK::WIN_POS_CENTER);$this->show_all();}public function on_clicked($sender) {if ($sender->get_active()) {$this->set_title("Check button");} else {$this->set_title("");}}}new Example();Gtk::main();?>
根据GtkCheckButton的状态,我们将在窗口的标题栏中显示标题。
$cb = new GtkCheckButton("Show title");
GtkCheckButton小部件已创建。 小部件的构造器采用一个参数,即标签。 标签显示在复选框旁边。
$cb->set_active(true);
默认情况下标题是可见的,因此我们默认情况下选中复选按钮。
$cb->connect('clicked', array($this, 'on_clicked'));
如果我们单击复选框小部件,则会发出单击的信号。 我们将on_clicked()方法挂接到信号上。
if ($sender->get_active()) {$this->set_title("Check button");} else {$this->set_title("");}
如果选中该按钮,我们将显示标题。 get_active()方法用于确定检查按钮的状态。 set_title()方法用于设置窗口的标题。 为了清除窗口的标题,我们使用一个空字符串。

图:GtkCheckButton
GtkLabel
GtkLabel小部件显示文本。 此小部件不支持用户交互。
<?php/*ZetCode PHP GTK tutorialIn this example, we show a text on thewindow. For this, we use the GtkLabel widget.author: Jan Bodnarwebsite: www.zetcode.comlast modified: August 2011*/class Example extends GtkWindow {public function __construct() {parent::__construct();$this->init_ui();}private function init_ui() {// no trailing white space!$lyrics = <<<LYRICSMeet you downstairs in the bar and heardyour rolled up sleeves and your skull t-shirtYou say why did you do it with him today?and sniff me out like I was Tanqueraycause you're my fella, my guyhand me your stella and flyby the time I'm out the dooryou tear men down like Roger MooreI cheated myselflike I knew I wouldI told ya, I was troubleyou know that I'm no goodLYRICS;$this->set_title('GtkLabel');$this->connect_simple('destroy', array('gtk', 'main_quit'));$this->set_border_width(10);$label = new GtkLabel($lyrics);$this->add($label);$this->set_default_size(250, 200);$this->set_position(GTK::WIN_POS_CENTER);$this->show_all();}}new Example();Gtk::main();?>
该代码示例在窗口上显示了一些歌词。
// no trailing white space!$lyrics = <<<LYRICSMeet you downstairs in the bar and heardyour rolled up sleeves and your skull t-shirt
我们创建多行文本。 在 PHP 中,可以使用 Heredoc 语法创建多行文本。
$this->set_border_width(10);
GtkLabel周围有一些空白。
$label = new GtkLabel($lyrics);$this->add($label);
GtkLabel小部件已创建并添加到窗口。

图:GtkLabel小部件
GtkEntry
GtkEntry是单行文本输入字段。 该小部件用于输入文本数据。
<?php/*ZetCode PHP GTK tutorialThis example demonstrates the GtkEntry widget.author: Jan Bodnarwebsite: www.zetcode.comlast modified: August 2011*/class Example extends GtkWindow {private $label;public function __construct() {parent::__construct();$this->init_ui();}private function init_ui() {$this->set_title('GtkEntry');$this->connect_simple('destroy', array('gtk', 'main_quit'));$fixed = new GtkFixed();$this->label = new GtkLabel("...");$fixed->put($this->label, 60, 40);$entry = new GtkEntry();$fixed->put($entry, 60, 100);$entry->connect('key_release_event', array($this, 'on_key_release'));$this->add($fixed);$this->set_default_size(250, 200);$this->set_position(GTK::WIN_POS_CENTER);$this->show_all();}public function on_key_release($sender, $event) {$this->label->set_text($sender->get_text());}}new Example();Gtk::main();?>
此示例显示了条目小部件和标签。 我们输入的文本将立即显示在标签小部件中。
$entry = new GtkEntry();
GtkEntry小部件已创建。
$entry->connect('key_release_event', array($this, 'on_key_release'));
我们将on_key_release()方法插入GtkEntry小部件的key_release_event。
public function on_key_release($sender, $event) {$this->label->set_text($sender->get_text());}
在该方法内部,我们通过get_text()方法从GtkEntry小部件中获取文本,并使用标签的set_text()方法将其设置为标签。

图:GtkEntry小部件
GtkImage
GtkImage小部件显示图像。
<?php/*ZetCode PHP GTK tutorialThis example demonstrates the GtkImage widget.author: Jan Bodnarwebsite: www.zetcode.comlast modified: August 2011*/class Example extends GtkWindow {public function __construct() {parent::__construct();$this->init_ui();}private function init_ui() {$this->set_title('Red Rock');$this->connect_simple('destroy', array('gtk', 'main_quit'));$this->set_border_width(2);$image = GtkImage::new_from_file("redrock.png");$this->add($image);$this->set_default_size(250, 200);$this->set_position(GTK::WIN_POS_CENTER);$this->show_all();}}new Example();Gtk::main();?>
在我们的示例中,我们在窗口上显示图像。
$this->set_border_width(2);
我们在图像周围放置了一些空边框。
$image = GtkImage::new_from_file("redrock.png");
GtkImage小部件已创建。 我们使用静态new_from_file()方法从文件加载图像。 如果找不到或无法加载文件,则生成的GtkImage将显示损坏的图像图标。
$this->add($image);
窗口小部件已添加到容器中。
GtkComboBox
ComboBox是一个小部件,允许用户从选项列表中进行选择。
<?php/*ZetCode PHP GTK tutorialThis example demonstrates the GtkComboBox widgetauthor: Jan Bodnarwebsite: www.zetcode.comlast modified: August 2011*/class Example extends GtkWindow {private $label;public function __construct() {parent::__construct();$this->init_ui();}private function init_ui() {$this->set_title('GtkComboBox');$this->connect_simple('destroy', array('gtk', 'main_quit'));$fixed = new GtkFixed();$this->label = new GtkLabel('-');$fixed->put($this->label, 50, 140);$cb = GtkComboBox::new_text();$cb->connect('changed', array($this, 'on_changed'));$cb->append_text('Ubuntu');$cb->append_text('Mandriva');$cb->append_text('Redhat');$cb->append_text('Gentoo');$cb->append_text('Mint');$fixed->put($cb, 50, 30);$this->add($fixed);$this->set_default_size(250, 200);$this->set_position(GTK::WIN_POS_CENTER);$this->show_all();}public function on_changed($sender) {$this->label->set_label($sender->get_active_text());}}new Example();Gtk::main();?>
该示例显示了一个组合框和一个标签。 组合框具有五个选项的列表。 这些是 Linux 发行版的名称。 标签窗口小部件显示了从组合框中选择的选项。
$cb = GtkComboBox::new_text();
GtkComboBox小部件已创建。 new_text()是创建仅显示字符串的GtkComboBox的方法。
$cb->append_text('Ubuntu');$cb->append_text('Mandriva');$cb->append_text('Redhat');$cb->append_text('Gentoo');$cb->append_text('Mint');
它充满了数据。
public function on_changed($sender) {$this->label->set_label($sender->get_active_text());}
在on_changed()方法内部,我们从组合框中获取选定的文本并将其设置为标签。

图:GtkComboBox
在 PHP GTK 教程的这一章中,我们展示了一些基本的小部件。
