::-- ehu4ever [2005-08-09 13:55:24]

Contents

  1. 普通货色

1. 普通货色

按钮到处都是,真是太太普通了。用gtk.Button()就可以建立一个按钮了,还可以顺便加一个文本标签,想造一个空白的按钮也随你便。你也可在你的按钮上铺上图片。

建立一个按钮就是这么简单:

  button = gtk.Button(label=None, stock=None)

在很多时候,按钮上还会有一个指示图标。就是以下的其中一个:

  STOCK_DIALOG_INFO
  STOCK_DIALOG_WARNING
  STOCK_DIALOG_ERROR
  STOCK_DIALOG_QUESTION
  STOCK_DND
  STOCK_DND_MULTIPLE
  STOCK_ADD
  STOCK_APPLY
  STOCK_BOLD
  STOCK_CANCEL
  STOCK_CDROM
  STOCK_CLEAR
  STOCK_CLOSE
  STOCK_CONVERT
  STOCK_COPY
  STOCK_CUT
  STOCK_DELETE
  STOCK_EXECUTE
  STOCK_FIND
  STOCK_FIND_AND_REPLACE
  STOCK_FLOPPY
  STOCK_GOTO_BOTTOM
  STOCK_GOTO_FIRST
  STOCK_GOTO_LAST
  STOCK_GOTO_TOP
  STOCK_GO_BACK
  STOCK_GO_DOWN
  STOCK_GO_FORWARD
  STOCK_GO_UP
  STOCK_HELP
  STOCK_HOME
  STOCK_INDEX
  STOCK_ITALIC
  STOCK_JUMP_TO
  STOCK_JUSTIFY_CENTER
  STOCK_JUSTIFY_FILL
  STOCK_JUSTIFY_LEFT
  STOCK_JUSTIFY_RIGHT
  STOCK_MISSING_IMAGE
  STOCK_NEW
  STOCK_NO
  STOCK_OK
  STOCK_OPEN
  STOCK_PASTE
  STOCK_PREFERENCES
  STOCK_PRINT
  STOCK_PRINT_PREVIEW
  STOCK_PROPERTIES
  STOCK_QUIT
  STOCK_REDO
  STOCK_REFRESH
  STOCK_REMOVE
  STOCK_REVERT_TO_SAVED
  STOCK_SAVE
  STOCK_SAVE_AS
  STOCK_SELECT_COLOR
  STOCK_SELECT_FONT
  STOCK_SORT_ASCENDING
  STOCK_SORT_DESCENDING
  STOCK_SPELL_CHECK
  STOCK_STOP
  STOCK_STRIKETHROUGH
  STOCK_UNDELETE
  STOCK_UNDERLINE
  STOCK_UNDO
  STOCK_YES
  STOCK_ZOOM_100
  STOCK_ZOOM_FIT
  STOCK_ZOOM_IN
  STOCK_ZOOM_OUT

button.py是一个使用gtk.Button()建立按钮的例子,有的按钮上的文本,有的按钮上有图片,也可以两样都有:

Figure 6.1. Button with Pixmap and Label

以下是源代码:

   1 #!/usr/bin/env python
   2 
   3 # example-start buttons buttons.py
   4 
   5 import pygtk
   6 pygtk.require('2.0')
   7 import gtk
   8 
   9 # Create a new hbox with an image and a label packed into it
  10 # and return the box.
  11 
  12 def xpm_label_box(parent, xpm_filename, label_text):
  13     # Create box for xpm and label
  14     box1 = gtk.HBox(False, 0)
  15     box1.set_border_width(2)
  16 
  17     # Now on to the image stuff
  18     image = gtk.Image()
  19     image.set_from_file(xpm_filename)
  20 
  21     # Create a label for the button
  22     label = gtk.Label(label_text)
  23 
  24     # Pack the pixmap and label into the box
  25     box1.pack_start(image, False, False, 3)
  26     box1.pack_start(label, False, False, 3)
  27 
  28     image.show()
  29     label.show()
  30     return box1
  31 
  32 class Buttons:
  33     # Our usual callback method
  34     def callback(self, widget, data=None):
  35         print "Hello again - %s was pressed" % data
  36 
  37     def __init__(self):
  38         # Create a new window
  39         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  40 
  41         self.window.set_title("Image'd Buttons!")
  42 
  43         # It's a good idea to do this for all windows.
  44         self.window.connect("destroy", lambda wid: gtk.main_quit())
  45         self.window.connect("delete_event", lambda a1,a2:gtk.main_quit())
  46 
  47         # Sets the border width of the window.
  48         self.window.set_border_width(10)
  49 
  50         # Create a new button
  51         button = gtk.Button()
  52 
  53         # Connect the "clicked" signal of the button to our callback
  54         button.connect("clicked", self.callback, "cool button")
  55 
  56         # This calls our box creating function
  57         box1 = xpm_label_box(self.window, "info.xpm", "cool button")
  58 
  59         # Pack and show all our widgets
  60         button.add(box1)
  61 
  62         box1.show()
  63         button.show()
  64 
  65         self.window.add(button)
  66         self.window.show()
  67 
  68 def main():
  69     gtk.main()
  70     return 0
  71 
  72 if __name__ == "__main__":
  73     Buttons()
  74     main()

Lines 12-34 define the xpm_label_box() helper function which creates a horizontal box with a border width of 2 (lines 14-15), populates it with an image (lines 22-23) and a label (line 26).

Lines 36-70 define the Buttons class. Lines 41-70 define the instance initialization method which creates a window (line 43), sets the title (line 45), connects the "delete_event" and "destroy" signals (lines 48-49). Line 55 creates the button without a label. Its "clicked" signal gets connected to the callback() method in line 58. The xpm_label_box() function is called in line 61 to create the image and label to put in the button in line 64.

The xpm_label_box() function could be used to pack xpm's and labels into any widget that can be a container.

The Button widget has the following signals:

      pressed - emitted when pointer button is pressed within Button widget

      released - emitted when pointer button is released within Button widget

      clicked - emitted when pointer button is pressed and then released within Button widget

      enter - emitted when pointer enters Button widget

      leave - emitted when pointer leaves Button widget