含有章节索引的中文 文章模板
::-- ehu4ever [DateTime(2005-08-08T02:26:25Z)] TableOfContents
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 |
attachment:base.png |
这个程序的第一行是用来可以让这个程序从*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的程序中,这些麻烦事都不去管了。