当前位置:Linux教程 - Linux - libDrakx让创建用户界面变得很容易

libDrakx让创建用户界面变得很容易

作者: BUILDER.COM
Tuesday, October 22 2002 4:30 PM



随着Linux变得更加流行,发行商已经试图在这个复杂的操作系统上建立一个更加友好的界面。大多数销售商都提供了配置工具,用以指导用户编辑处理配置文件,这样他们就不用自己亲自动手了。Mandrake Linux以提供许多易用的配置工具而著称,这些工具让用户从Windows或者MacOS跨越到Linux变得相对容易些。


Mandrake配置工具(也就是drak工具)一个有意思的特性是,这些工具中的许多子工具都可以在控制台模式下或者是X(Linux的图形用户界面)里使用。最有用的drak工具之一是libDrakx,这个工具perl-GTK在Mandrake里的附加工具。作为drakxtools-newt工具包的一部分,libDrakx提供了一些自定义命令,而且能在控制台或X里都能正常运行。它既包括了Mandrake配置工具的核心设置部分,也包括了你创建新工具所必需的东西。我会带着你,告诉你如何使用libDrakx来创建你自己的用户界面。

libDrakx总括
Mandrake的标准安装会包括drakxtools-newt,它提供了创建双重界面所需的相当多的一部分代码。Mandrake开发人员所使用的很多通用程序都来自perl-MDK-Common。X GUI的功能由perl-GTK提供,而控制台的显示是由libnewt处理的。如果你已经和Linux打过交道并记得原有基于对话框的Slackware安装器,你会发现newt界面会很类似。Mandrake安装器使用了相同的工具集来同时提供图形用户界面和文本界面的安装器。

一个简单的例子
让我们先从基本的东西开始。Listing A里的应用程序显示了一个提示和OK按纽,这个按钮可以关闭这个程序,就像你可以在图A和图B里看到的一样,用户所看到的界面在本质上是相同的,不论使用的是控制台还是图形用户界面。

用户环境里的$DISPLAY变量是用来决定图形模式的。如果想要在X里执行以上代码,当DISPLAY=:0时,你会看到图形用户界面的版本。如果不设置DISPLAY变量(unset DISPLAY),你会看到文本的版本。决定如何进行下去是在/usr/lib/libDrakx/interactive.pm里发生的,见Listing B。

你还会在interactive.pm里看到其他代码,用于检查应用程序是否需要root用户权限,如果需要,就询问root密码。Listing B里的代码说明了,在$DISPLAY变量和对X环境进行测试的基础上,interactive_gtk或者 interactive_newt将会被如何使用。

这就是它所有的。如果想让显示的文本不单是一个简单的短语,比如说要显示文件的内容,你可以使用Mandrake工具包里一个简单的函数cat_。要使用它,就要往代码里加入use common以包含common.pm。如果查看一下/usr/lib/libDrakx/common.pm,你会看到许多有用的简化函数,用它们能节省一些代码编写的工作。这一次,我没有把迭代字符串传递给ask_warn,而是尝试了使用变量。见Listing C。

你可以使用其他许多标准的窗口小部件,而不只是一个简单的OK框。首先,让我们在不改变代码基数的情况下允许用户能够自己做决定。现在应用程序会显示OK或者Cancel,并根据用户的选择进行下一步。图C显示的是图形用户界面,图D显示的是控制台的版本。要看源代码,查看Listing D



看起来够简单了吧。但是它是怎么工作的呢?让我们来一行一行地看代码。

第1行:这是个标准的Perl脚本标头
第2行:我们告诉Perl把/usr/lib/libDrakx加入到库路径里。
第5行:interactive含有drak工具集的核心。我们在后面将更详细地讨论这个问题。
第6行:这是标准的Perl;strict只是在把你的代码传递给Perl解释程序时更加严格了变量、引用和子程序规则。
第8行:我们正在创建一个新的用户界面。
第10行:ask_warn是一个带有OK按纽的简单信息。第一个变量是窗口的标题,第二个变量是要显示的信息。""_(""格式不是必须的,但是MandrakeSoft会用它来加强集成的语言翻译文件:根据系统区域的配置,文本就可以使用用户的本族语来显示。
第12行:这一行的作用是关闭用户界面。



一个更加复杂的配置工具:列表

列表对于配置工具同样很有用,也能很容易地实现。ask_from_list函数需要包含标题、提示、选择列表和缺省的值。Listing E告诉了你能够如何生成一个弹出式的ToolTip。(ToolTip不能工作在文本模式下。)

一个更加详细的列表可能会包含有树形或者大纲形的选择列表。Listing F说明了这个技巧。

在Listing F里,你声明把管型符号[|]作为ask_from_treelist第三个参数的分隔符,并声明把Fruit|Apple作为缺省的位置,把None作为可选项。在控制台上,字符串没有可视化的树形结构,其形式分别见图E和F。

图E





图形用户界面还是文本界面?
以上这些窗口小部件以及interactive.pm里的其他界面的组合,应该足以满足你在绝大多数任务中创建用户界面的要求。文本界面没有图形用户界面那样复杂。如果既能保持界面的简单风格,又能同时在控制台和图形用户界面模式下运行,这肯定是个巨大的优势。MandrakeSoft的工具包得到了GPL的许可,所以即使不使用Mandrake Linux你也可以随意使用和改编其代码。