跳转至内容

使用Gtk2-Perl编程/入门/Hello World

来自Wikibooks,开放世界中的开放书籍

Hello World!

[编辑 | 编辑源代码]
use strict;     
use warnings;   

use Gtk2;      
Gtk2->init;

my $window = Gtk2::Window->new;
my $label  = Gtk2::Label->new('Hello World!');

$window->signal_connect('delete-event' => sub { Gtk2->main_quit });

$window->add($label);

$label ->show;
$window->show;

Gtk2->main;

分解代码

[编辑 | 编辑源代码]
use strict;     
use warnings;

因为如果还没有人告诉你,在编写每个Perl程序时都要在顶部包含这些内容,我现在就告诉你。

use Gtk2;

Gtk+ 库包含在 Gtk2 命名空间下。

    
Gtk2->init;

每个 Gtk2 应用程序都需要调用此方法。它初始化库以供使用,设置颜色映射和连接默认信号处理程序等内容。此方法还会检查已在命令行上传递给应用程序的参数。所有 Gtk 应用程序都接受以下参数。它们将从参数列表中删除,其余参数将留给您的应用程序处理。

   * --gtk-module
   * --g-fatal-warnings
   * --gtk-debug
   * --gtk-no-debug
   * --gdk-debug
   * --gdk-no-debug
   * --display
   * --sync
   * --name
   * --class

无需显式调用 init 方法,您可以像这样隐式调用它。

use Gtk2 '-init';


my $window = Gtk2::Window->new('toplevel');
my $label  = Gtk2::Label->new('Hello World!');

这两行创建新的部件。部件是 GUI 的元素。窗口、标签、按钮、菜单、图像都是部件的示例。在这个例子中,我们可以看到窗口部件的构造函数带有一个参数,告诉它创建一个顶级窗口,而标签部件可以接收一些要显示的文本。不同的部件接受不同的构造函数参数。查看 Gtk 文档以获取有关特定部件的更多信息。


$window->add($label);

这行代码将标签打包到窗口中。窗口部件是容器的一个例子。容器部件用于控制其子部件如何在屏幕上显示。容器部件有多种方法可用于添加子部件。这里我们使用一个非常简单的示例在窗口内显示一个标签。


$label ->show;
$window->show;

你能猜出这些代码行是做什么的吗?


$window->show_all;

我们也可以这样说。


Gtk2->main;

每个 Gtk 应用程序都必须调用 main 方法。这将控制权交给 Gtk 主循环,该循环等待事件发生,然后采取适当的操作。


$window->signal_connect('delete-event' => sub { Gtk2->main_quit });

我们没有忘记介绍这一行。在这里,我们将回调附加到窗口的“delete-event”上。回调是对函数的引用。在此示例中,我们使用匿名子例程,它会中断 Gtk 的主循环并将控制权返回给程序。在调用 Gtk2->main 之后将执行任何代码,在我们的示例中,程序只是关闭。如果我们没有将此回调连接到“delete-event”,窗口将关闭,但我们的程序仍将在主循环中运行,用户将无法轻松退出应用程序。(您可以使用 Ctrl+c 终止它。)

华夏公益教科书