用户名: 密码: 免费注册 忘记密码? 网站地图 | 加入收藏 | 设为首页
首页 | 新闻 | 工具 | 系统 | 办公 | 聊天 | 多媒体 | 网页 | 运营 | 平面 | 欣赏 | 数据库 | 程序 | 服务器 | 组网
网页 | 3dmax | Ghost | Windows Xp| Dreamweaver | photoshop | Flash | office | Alexa | Css | QQ | Asp | PHP | Jsp | Access
Flash MX 2004入门 | 网站推广策略 | CorelDRAW入门 | ASP学习 | 网站建设大师功 | Word入门
  iTbulo.com > 学院 > 程序开发教程 > Perl应用教程 > PERL应用教程 > 文章正文
用 Perl 进行 GNOME 编程
iTbulo.COM 2006-4-26 佚名()

添加菜单条

像前面提到的,GNOME 优于 GTK+ 的地方在于,它提供更多我们在应用程序中需要用到的标准控件。现在来为我们的程序添加一个标准的菜单。在 signal_connect 语句后添加下面的内容


 $app->create_menus(
        {type => 'subtree',
         label => '_File',
         subtree => [
                {type => 'item',
                 label => 'E_xit',
                 pixmap_type => 'stock',
                 pixmap_info => 'Menu_Quit'
                }
                    ]
        },
        {type => 'subtree',
         label => '_Help',
         subtree => [
                {type => 'item', 
                 label => '_About...',
                 pixmap_type => 'stock',
                 pixmap_info => 'Menu_About'
                }
                    ]
        }
      );

我们为 create_menus 传递了一系列匿名的散列,每个散列都代表菜单中的一项。每个散列中的 subtree 关键字指明当前项下面还有子项。在散列的 label 关键字的值中,我们可以在需要定义为快捷键的字母前面加一个下划线。如上,Alt+ F就将打开菜单的 File 项。subtree 关键字的值其实可以是一个包含很多匿名散列的匿名数组,但是上面的程序段中,两个 subtree 关键字的值我们都只指定了一个匿名散列。

表征子项的散列中的 type 关键字都被赋于“item”,表示该子项为一个普通项,不像它的上一级包含子菜单。菜单的每个选项都可以有自己的图标。这里通过 “pixmap_type=>stock” 语句我们调用了 GNOME 自带的图标库,我们还用了 Menu_Quit 和 Menu_About 方法来实现标准的退出的弹出窗口功能。

现在,重新运行你的程序,你就将会看到菜单条了。还想来点特别炫的东西吗?我说过 GNOME 可以为你做到一切。用下面的语句启动程序:

 LANG=fr_FR perl hello.pl

一切仍然正常,仍有菜单条,但是文字却变成了法语!实现这个转变的代码在哪里呢?GNOME 为你做了一切。LANG 后根pt_PT就将变成葡萄牙语,跟 de_DE 就将变成德语,跟 el_GR (如果你有那个字库的话)就将变成希腊语。神奇吧! 这里还有一个小问题:那个菜单好像出来能看不能用。由于我们已经知道了如何退出一个 GTK+ 程序,那么让我们首先让菜单的Exit项起作用。把这个菜单项的散列内容照下面修改:


                {type => 'item',
                 label => 'E_xit',
                 pixmap_type => 'stock',
                 pixmap_info => 'Menu_Quit',
                 callback => sub {Gtk->main_quit; return 0 }
                }

正如我们前面说到的一样,当我们选中这个选项之后,GNOME 会自动执行我们为那个选项编写的子程序。

添加一个弹出窗口

现在再改写其它菜单项的程序,为它们添加弹出窗口的功能。同样,GNOME 将会为我们完成这一切。我们为 About… 指定一个子程序的引用,


{type => 'item',
                 label => '_About...',
                 pixmap_type => 'stock',
                 pixmap_info => 'Menu_About',
                 callback => chunk73189886chunk#38;about_box
                }

这个子程序会创建并在窗口上显示这个弹出窗口:


sub about_box {
               my $about = new Gnome::About $NAME, "v1.0",
                  "(C) Simon Cozens, 2000", ["Simon Cozens"],
                "This program is released under the same terms as Perl itself";
             show $about;
         }

用 Gnome:About 类可以创建弹出窗口的实例:在这里我们给弹出窗口传递了我们程序的名称,版本,版权信息,作者的姓名和其它评论。然后用显示主窗口用到的 show 方法来同样显示这个弹出窗口。当点击 “OK” 按钮的时候,这个弹出窗口就关闭。

添加更多的东西

GNOME 系统还提供另外两个很有特色的交互项:工具栏和状态栏。我们首先添加工具栏,在添加菜单的语句后添加下面的语句:


$app->create_toolbar(
    {
        type => 'item',
        label => 'Exit',
        pixmap_type => 'stock',
        pixmap_info => 'Quit',
        hint => "Click here to quit",
        callback => sub { Gtk->main_quit },
    }, {
        type => 'item',
        label => 'About...',
        pixmap_type => 'stock',
        pixmap_info => 'About',
        hint => "More information about this app",
        callback => chunk73189426chunk#38;about_box
    }
   );

我们同样给 creat_toolbar 函数传递了一系列的匿名散列,而且散列的很多关键值都是你熟悉的。hint 关键值的内容定义当鼠标旋停在按钮上的时候显示的内容。而每个选项绑定的处理函数和选项的图标都和前面一样。 接着添加状态栏:


    my $bar = new Gnome::AppBar 0,1,"user" ;
    $bar->set_status("   Welcome   ");

    $app->set_statusbar( $bar );

首先,创建一个 AppBar 实例,它是一个程序的状态栏。然后用 set_status 定义状态栏的初始信息。状态栏到现在就已经存在了,但是还不会在屏幕上被显示出来。因为还没有指定它是属于整个 GNOME 环境中那个应用程序。所以我们用 set_statusbar 方法给它指定归属。现在它就会在主窗口中显示出来了。

完整程序清单

下面是读完这个教程,一步步按照我们说的做所应该生成的程序清单:


    #!/usr/bin/perl -w

    use strict;
    use Gnome;

    my $NAME = 'Hello World';

    init Gnome $NAME;

    my $app = new Gnome::App $NAME, $NAME;

    signal_connect $app 'delete_event', sub { Gtk->main_quit; return 0 };

    $app->create_menus(
               {type => 'subtree',
                label => '_File',
                subtree => [
                    {type => 'item',
                     label => 'E_xit',
                     pixmap_type => 'stock',
                     pixmap_info => 'Menu_Quit',
                     callback => sub { Gtk->main_quit; return 0 }
                    }
                       ]
               },
               {type => 'subtree',
                label => '_Help',
                subtree => [
                    {type => 'item', 
                     label => '_About...',
                     pixmap_type => 'stock',
                     pixmap_info => 'Menu_About',
                     callback => chunk73189196chunk#38;about_box
                    }
                       ]
               }
              );

    $app->create_toolbar(
                 {
                  type => 'item', 
                  label => 'Exit', 
                  pixmap_type => 'stock', 
                  pixmap_info => 'Quit', 
                  hint => "Click here to quit",
                  callback => sub { Gtk->main_quit }, 
                 }, {
                 type => 'item',
                 label => 'About...', 
                 pixmap_type => 'stock',
                 pixmap_info => 'About',
                 hint => "More information about this app",
                 callback => chunk73189196chunk#38;about_box
                }
                );

    my $label = new Gtk::Label "Hello, world";
    $app->set_contents($label);

    my $bar = new Gnome::AppBar 0,1,"user" ;
    $bar->set_status("   Welcome   ");
    $app->set_statusbar( $bar );

    show_all $app;

    main Gtk;

    sub about_box {
      my $about = new Gnome::About $NAME, "v1.0", 
      "(C) Simon Cozens, 2000", ["Simon Cozens"], 
      "This program is released under the same terms as Perl itself";
      show $about;
    }

=head1 Summary

这样,我们用 GNOME/Perl 创建了我们的第一个应用程序。它拥有标准的 GNOME 界面,有标准的菜单栏,工具栏,状态栏,弹出窗口。它无论是看起来,还是真正运行起来都像一个真正的 GNOME 应用程序。总共只有大约 70 行 Perl 代码。

下一次,我们会创建一个更有用的应用程序,一个食谱管理器。在里面我们将会用到一些稍微复杂一些的控件,比如容器,文本输入域,滚动条和列表框。

上一页  [1] [2] 

文章搜索
相关资讯
相关文章 相关下载
优化你的 Perl 代码
Perl小技巧:文件操作
windows下Perl开发环境的安装和配置
mod_perl 编程的简单介绍
perl的建树算法
焦点信息