含有章节索引的中文 文章模板

::-- ehu4ever [2005-08-08 02:26:25]

1. Getting Started

我们用一段最最esay的代码来开始我们的PyGTK之旅,这个小程序会构造一个200x200 pixel的窗口,它只能用shell才能关掉。

   1 #!/usr/bin/env python
   2 
   3 # example base.py
   4 
   5 import pygtk
   6 pygtk.require('2.0')
   7 import gtk
   8 
   9 class Base:
  10     def __init__(self):
  11         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  12         self.window.show()
  13 
  14     def main(self):
  15         gtk.main()
  16 
  17 print __name__
  18 if __name__ == "__main__":
  19     base = Base()
  20     base.main()

将上面这段代码保存之后,就可以运行了:

python base.py

如果basy.py被你弄成了被执行文件,而且它的存放路径在PATH环境变量中 ,那么它也可以用下面这个命令运行:

base.py

下面是对于整段代码的解释:

第一行是调用python来执行base.py。第五到七行是用来区别装在你pc上的不同版本的PyGTK。这几行代码表明,本程序使用的是PyGTK的2.0版本,它包含了所有主版本号是2的PyGTK。这样这个程序就不会使用你pc上的PyGTK的早期版本(如果有的话)。

18到20行代码是用来检查__name__的值是不是__main__,这样就把程序限定在只有从python直接启动的情况下才会运行,而不是import到了一个正在运行的python解释器。在这种情况下,这上程序就会建造一个新的Base类,而且在 variable base中保存了一个指向它的reference(注意:其实这句话我也不是很懂!!!)。

程序的最后是调用main()启动GTK+的事件处理循环。

程序运用后,就会出现如下图的一个window:

Figure 2.1. Simple PyGTK Window

这个程序的第一行是用来可以让这个程序从*UNIX的shell程序中调用,当然python要在你的PATH中。在所有的程序中,如果有这么一行的话,它一定是line 1

程序的5到7行import了PyGTK 2的模块,并且初始化了GTK+的环境。这几个PyGTK的模块定义了用来操作GTK+的程序接口,这个程序中要用到。

对于熟悉GTK+的人来说,GTK+的初始化工作包括了调用gtk_init(),这个函数为我们事先搞定了一些事,比如默认的窗口视觉样式和颜色,默认的事件处理方式,它还检查了在命令行中传入我们程序的参数,查找一个或多个以下的东东:

  • --gtk-module
  • --g-fatal-warnings
  • --gtk-debug
  • --gtk-no-debug
  • --gdk-debug
  • --gdk-no-debug
  • --display
  • --sync
  • --name
  • --class

它把它们从命令行中删除了(如果有的话),然后把余下的东西留给了我们的程序去对付。上面的那堆东西都是可以被GTK+程序处理的标准参数。

9到15行定义了一个python的类,它的名字叫作Base。在这个类中有实例初始化函数__init__()。这个__init__()定义了一个top-level的窗口(line 11),然后让GTK+显示它(line 12)。在11行中带有参数gtk.WINDOW_TOPLEVEL的函数gtk.Window()告诉窗口管理器:我们要这个窗口想要得到装修(使用一些窗口管理器的主题theme)和安置(放在显示平面的某一个位置)。这个窗口没有子窗口,它的默认大小是200x200,当然,我们可以在之后操作它。

14、15行定义main(),它调用了PyGTK的main()。而这个PyGTK的main()又去调用了GTK+的事件处理循环,来处理鼠标、键盘、和窗口事件。

18到20行让程序在被直接启动或是在被当作参数传入python解释器的情况下自动运行。在这些情况下,包含在python的变量__name__中的程序名称是__main__,这样18到20行程序就会被执行。

19行创建了一个Base类的实例,叫做base。一个gtk.Window被创建并且显示。

20行调用Base类的main()函数,启动GTK+的事件处理循环。当程序执行到这一步,GTK+会在sleep中等待X事件(比如键盘或鼠标上的键被按下),超时,或是文件的IO操作开始了。但是,在我们的这个最最easy的程序中,这些麻烦事都不去管了。