Botones con texto y stock icons en PyGtk

He empezado a aprender un poco de Python, muy sencillito y una buena forma de escapar del boilerplate code constante en C. He empezado mirando el libro libre Dive into Python (con traducción al Español, pero desactualizada) y en lugar de andar haciendo las típicas pruebas de concepto, me he puesto con PyGtk. Así voy aprendiendo Python a la vez que van saliendo ventanitas.

Desde hacía tiempo tenía ganas de usar los iconos de los temas de Gnome en una aplicación mía, pero por mucho que buscaba no encontraba con la palabra clave. Si os fijáis, la mayoría de las aplicaciones basadas en Gtk utilizan los mismos iconos para las mismas cosas. Por lo visto estos iconos se conocen como stock items. Es fácil utilizar un botón con un icono de estos. Simplemente tendríamos que utilizar

  1. self.button = gtk.Button(stock=gtk.STOCK_SELECT_COLOR)

El valor que le demos al argumento stock determinará el tipo de icono. Directamente el sistema incluirá una etiqueta relacionada con el icono.

Por desgracia, si queremos incluir un stock icon de estos y a la vez una etiqueta personalizada, las cosas se complican - aunque no mucho. Fácilmente podemos hacer una clase derivada de gtk.Button, y dentro del mismo incluir una caja horizontal con dos widgets: una imagen con el stock icon y la etiqueta con el texto que queramos. The Code:

  1. class myCustomButton (gtk.Button):
  2.  
  3.         def __init__(self):
  4.                 super(myCustomButton, self).__init__()
  5.                 print “myCustomButton init”
  6.                
  7.                 self.estructura = gtk.HBox()
  8.                 self.icono = gtk.image_new_from_stock(gtk.STOCK_STOP, gtk.ICON_SIZE_LARGE_TOOLBAR)
  9.                 self.label = gtk.Label(‘Éste es mi texto’)
  10.                
  11.                 self.estructura.pack_start(self.icono, True, True, 3)
  12.                 self.estructura.pack_start(self.label, True, True, 3)
  13.                
  14.                 self.icono.show()
  15.                 self.label.show()
  16.                 self.estructura.show()
  17.                
  18.                 self.add(self.estructura)
  19.                 self.show()

Quedaría algo así de bonitorl:

2 gañanes han comentado

  1. Zarate on Agosto 19th, 2008

    Hace milenios que estoy buscando una excusa para meter el cuezo en Python, y hacer aplicaciones multiplataforma con GTK es una de ellas.

    No dejes de dar la chapa con cómo te va.

    Salud!

  2. [...] interface de HippoHX que espero salga en la próxima versión. Me he decidido por Flex en lugar de GTK más que nada por un tema de mi productividad (Flex es “sólo” un framework para Flash, [...]

Leave a Reply