Wednesday, August 16, 2006

WxPython 编程指南 1.2.1 导入wxPython


你要作的第一件事情就是导入主要的wxPython包。这个包名为wx:

import wx

一旦包被导入,你就可以引用wxPython中的类、函数等,每次引用的时候都需要使用wx作为前缀。比如:

class App(wx.App):

老式的导入风格:在我写这篇文章的时候,wxPython包的命名方式已经发生了变化。由于老式风格的写法仍然被支持,所以你可能遇到老式风格写法的代码。所以,我们将暂时跑题介绍一下老式风格代码的写法,以及为什么wxPython会作出改变。老式的包名为位wxPython并且有一个内部的模块名为wx。有两种方法从wxPython中导入wx,一种方法是:

from wxPython import wx # 这种方法不建议使用。

第二种方法是直接从wxPython中导入所有需要的模块

from wxPython.wx import * # 这种方法也不在支持,最好不要使用。

这两种方式存在严重的缺点。第二种方法在Python中会引起很大的麻烦,原因是会导致名称空间的冲突。以前的wx模块为了避免这种冲突给每个引用前面都加了一个wx前缀。尽管这样还是存在潜在的问题,但是很多wxPython程序员把这种方式作为了首选风格,你会在以前很多的代码中看到这种风格。基于这种风格,wxPython中的类名一般以小写字母开头,而方法名以大写字母开头。

然而,为了避免通过from wxPython import wx 这种方式带来的名称空间冲突,我们必须在每个类和方法前面都要输入两次wx.,比如wx.wxWindow。很多程序员看到了这种方式的弊端,认为应该去掉前缀,并且最终他们的要求得到了满足。如果你对此感兴趣你可以搜索wxPython的邮件列表,其中有对此问题的详细讨论。

更多需要了解的有关wxPython导入的知识是:在你从wxPython导入其他包之前你必须先导入wx。这一规则并不是Python中要求的,在Python 没有对导入顺序的要求。但是,毕竟wxPython是一个独立的模块,它包括了很多复杂的模块,这些模块实际上是封装了底层的C++ 小窗口部件工具。当你第一次导入wx模块的时候,它作了很多初始化的工作,这对于其他的wxPython模块是至关重要的。因此如果wx包没有导入那么wxPython的子包中的很多模块将无法使用,比如xrc模块:

import wx # 总是先导入wx

from wx import xrc # 再导入其他包

from wx import html

这种限制只有在wxPython中是必须的,其他Python包不受限制,你可以在任何需要的地方导入他们,可以在wxPython之前也可以在其后。因此,下面这个例子中的写法是正确的:

import sys

import wx

import os

from wx import xrc

import urllib

No comments: