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

::-- ehu4ever [2005-08-08 02:28:39]

1. 用PyGTK说“Hello”

现在我们要写的这个程序会有一个按钮。这是PyGTK版本的“Hello World”。

   1 #!/usr/bin/env python
   2 
   3 # example helloworld.py
   4 
   5 import pygtk
   6 pygtk.require('2.0')
   7 import gtk
   8 
   9 class HelloWorld:
  10 
  11     # This is a callback function. The data arguments are ignored
  12     # in this example. More on callbacks below.
  13     def hello(self, widget, data=None):
  14         print "Hello World"
  15 
  16     def delete_event(self, widget, event, data=None):
  17         # If you return FALSE in the "delete_event" signal handler,
  18         # GTK will emit the "destroy" signal. Returning TRUE means
  19         # you don't want the window to be destroyed.
  20         # This is useful for popping up 'are you sure you want to quit?'
  21         # type dialogs.
  22         print "delete event occurred"
  23 
  24         # Change FALSE to TRUE and the main window will not be destroyed
  25         # with a "delete_event".
  26         return False
  27 
  28     def destroy(self, widget, data=None):
  29         print "destroy signal occurred"
  30         gtk.main_quit()
  31 
  32     def __init__(self):
  33         # create a new window
  34         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  35 
  36         # When the window is given the "delete_event" signal (this is given
  37         # by the window manager, usually by the "close" option, or on the
  38         # titlebar), we ask it to call the delete_event () function
  39         # as defined above. The data passed to the callback
  40         # function is NULL and is ignored in the callback function.
  41         self.window.connect("delete_event", self.delete_event)
  42 
  43         # Here we connect the "destroy" event to a signal handler.  
  44         # This event occurs when we call gtk_widget_destroy() on the window,
  45         # or if we return FALSE in the "delete_event" callback.
  46         self.window.connect("destroy", self.destroy)
  47 
  48         # Sets the border width of the window.
  49         self.window.set_border_width(10)
  50 
  51         # Creates a new button with the label "Hello World".
  52         self.button = gtk.Button("Hello World")
  53 
  54         # When the button receives the "clicked" signal, it will call the
  55         # function hello() passing it None as its argument.  The hello()
  56         # function is defined above.
  57         self.button.connect("clicked", self.hello, None)
  58 
  59         # This will cause the window to be destroyed by calling
  60         # gtk_widget_destroy(window) when "clicked".  Again, the destroy
  61         # signal could come from here, or the window manager.
  62         self.button.connect_object("clicked", gtk.Widget.destroy, self.window)
  63 
  64         # This packs the button into the window (a GTK container).
  65         self.window.add(self.button)
  66 
  67         # The final step is to display this newly created widget.
  68         self.button.show()
  69 
  70         # and the window
  71         self.window.show()
  72 
  73     def main(self):
  74         # All PyGTK applications must have a gtk.main(). Control ends here
  75         # and waits for an event to occur (like a key press or mouse event).
  76         gtk.main()
  77 
  78 # If the program is run directly or passed as an argument to the python
  79 # interpreter then create a HelloWorld instance and show it
  80 if __name__ == "__main__":
  81     hello = HelloWorld()
  82     hello.main()

下图是这个程序创建的窗口

Figure 2.2. Hello World Example Program

在PyGTK的世界里,各种变量、函数的命名都有这样一个模式:gtk.*。 比如在上面这个程序中就有这些例子:

在之后的章节中可能不会显式地用出gtk这个前缀,但是它是默认的(不用担心)。上面的这个示例程序则使用了这个前缀。