技术开发 频道

用Perl进行GNOME编程

  添加菜单条

  像前面提到的,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 会自动执行我们为那个选项编写的子程序。

 

0
相关文章