还有一个古怪的想法也同样有趣。每人都有一个 Web 浏览器(几乎),即使那个浏览器碰巧是 lynx 或者是 links 。Python 标准的 webbrowser 模块允许以一种与 anygui 以及和 anygui 具有相似功能的软件的方式,灵活地启动一个“最适当可用”的 Web 浏览器。如果那个浏览器与某类 LOCALHOST 服务器通信,那么所有您想要的基本界面设备都完全在 Web 浏览器内(按钮、输入域、文本区域、图形等等)。这个后端也处于规划阶段。 字串7
一幅图片抵得上用千言万语来表达的含义(至少有时候)。由于我的编辑们,出于善意,不希望将本专题出版为一万字的巨著,所以就让我们看几幅屏幕快照。为了说明需要,使用了一个小玩具应用程序,有一些按钮,并且启用了几个不活动性的按钮(它的源代码显示如下)。其中还包含了几个文本标签。其它窗口小部件示例包含在 anygui 分发版的 test 目录中。
首先值得一看的,我们可能认为是作为“默认缺省值”的后端 Tkinter 。这个版本看上去和使用起来就与它应该做到的完全一致。但是, win.destroy() 调用就有点好笑 ― 它没有立即破坏窗口(并且关闭应用程序),而是一旦当窗口受到足够的注意(比如移动窗口),它就将窗口变为一个会消失的鬼怪。如同我说的,我们还停留在 alpha 阶段。这个示例在 Win98 下运行:
字串4
Tkinter 下的按钮应用程序(在 Win98 上) 字串4
字串7
在 Windows 下运行时,还有一个利用 win32all 模块使用 Windows 本机调用的选项。来自 ActiveState 的 ActivePython 分发版在缺省情况下有这个选项;否则,还需要另外获得此模块(也是来自 ActiveState)。总之,这种绑定是我看到的运行最好的一种 ― 但那也只是反映在我做测试的版本上。标签的放置与 Tkinter 上的有一点不同,这表示,一个人对不同后端不可能得到完全相同的视觉审美观。
字串7
Win32 下的按钮应用程序(在 Win98 上)
字串9
字串9
接下来,我决定将话题转到一个完全不同的平台上。在 OS/2 Warp 4 下运行 Python,我得到了如下的结果。由于某些原因,在文本标签前面多了一个不必要的 。尽管这是一个很小的错误,但令人印象深刻的是,同一段代码运行在不同的平台上,结果竟然是如此的不同: 字串7
Java Swing 下的按钮应用程序(在 OS/2 Warp 4 上)
字串9
字串2
然后转到 Linux 平台,在已经安装了 PyGTK 的系统上运行相同一个应用程序。只为了好玩,我在几个不同的 window 管理器下运行该应用程序。首先在 Enlightenment 上:
字串6
GTK 下的按钮应用程序(在 Enlightenment 上) 字串3
字串9
然后在 WindowMaker 上:
GTK 下的按钮应用程序(WindowMaker 上)
字串4
在不同窗口管理器下的窗口框架内所有东西都是相同的。标签的对齐和尺寸与 Windows 下的有点不同(需要额外增加几个像素,避免截断字)。我无法很容易地在我任何一个系统上安装 wxPython ,但我想结果应该是相似的。
BeOS 后端还处于一种较原始的状态。甚至玩具应用程序也失败了。但是,基本的 Window 类工作得很好: 字串9
BeOS r5 上的窗口测试应用程序 字串4
字串7
一些自身相同的代码
字串5
这段运行在所有证明过的平台上的代码非常简单。在我的示例中,该程序的上半部分完全是实现一个 switch,允许从命令行手工选择要使用的后端。在产品代码中,您将不会希望有这样的选择;但对于早期的测试,就象我所做的这些,是很有帮助。然而请注意,这里显示的屏幕快照的这些所有测试完全在没有任何命令行选项的情况下运行 ― 后端的选择是自动的。让我们来看一下代码:
[anygui] 的‘button.py’文本应用程序 import
sys
if
len(sys.argv)==
1
or
sys.argv[1].upper()==
'DEFAULT'
:
from
anygui
import
Window, Button, Application, Label
elif
sys.argv[
1].upper()==
'TK'
:
from
anygui.backends.tkgui
import
Window, Button, Application, Label
elif
sys.argv[
1].upper()==
'MSW'
:
from
anygui.backends.tkgui
import
Window, Button, Application, Label
elif
sys.argv[
1].upper()==
'BEOS'
:
from
anygui.backends.beosgui
import
Window, Button, Application, Label
elif
sys.argv[
1].upper()==
'GTK'
:
from
anygui.backends.gtkgui
import
Window, Button, Application, Label
elif
sys.argv[
1].upper()==
![我要研发网[www.51dev.com]](/templets/images/toplogo.gif)
