9.3. El Objeto Pistas (Tooltip)

Las Tooltips (Pistas) son pequeñas cadenas de texto que aparecen cuando se deja el cursor sobre un botón u otro control durante unos segundos.

Los controles que no reciben eventos (controles que no tienen su propia ventana) no funcionarán con las pistas.

La primera llamada que se usará crea una nueva pista. Sólo es necesario hacer esto una vez ya que el objeto que devuelve gtk.Tooltips puede usarse para crear múltiples pistas.

  tooltips = gtk.Tooltips()

Una vez que se ha creado una nueva pista, y el control que se quiere que la use está preparado, simplemente se utiliza esta llamada para asociarlos:

  tooltips.set_tip(widget, tip_text, tip_private=None)

El objeto tooltips es la pista que se acaba de crear. El primer argumento (widget) es el control que se quiere que muestre la pista; el segundo argumento (tip_text), el texto que se quiere visualizar. El último argumento (tip_private) es una cadena de texto que puede usarse como identificador.

El programa de ejemplo tooltip.py modifica el programa arrow.py para añadir una pista a cada botón. La figura Figura 9.3, “Ejemplo de Pistas” ilustra la ventana resultante con la pista del segundo botón flecha activada:

Figura 9.3. Ejemplo de Pistas

Ejemplo de Pistas

El código fuente del programa tooltip.py es:

    1	#!/usr/bin/env python
    2	
    3	# ejemplo tooltip.py
    4	
    5	import pygtk
    6	pygtk.require('2.0')
    7	import gtk
    8	
    9	# Crear una Flecha con los parámetros especificados
   10	# y empaquetarlo en un botón
   11	def create_arrow_button(arrow_type, shadow_type):
   12	    button = gtk.Button()
   13	    arrow = gtk.Arrow(arrow_type, shadow_type)
   14	    button.add(arrow)
   15	    button.show()
   16	    arrow.show()
   17	    return button
   18	
   19	class Tooltips:
   20	    def __init__(self):
   21	        # Creamos una ventana nueva
   22	        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
   23	
   24	        window.set_title("Tooltips")
   25	
   26	        # It's a good idea to do this for all windows.
   27	        window.connect("destroy", lambda w: gtk.main_quit())
   28	
   29	        # Establece el grosor del borde de la ventana
   30	        window.set_border_width(10)
   31	
   32	        # Creamos una caja para poner las flechas/botones
   33	        box = gtk.HBox(gtk.FALSE, 0)
   34	        box.set_border_width(2)
   35	        window.add(box)
   36	
   37	        # creamos un objeto de pista
   38	        self.tooltips = gtk.Tooltips()
   39	
   40	        # Empaquetamos y mostramos todos los controles
   41	        box.show()
   42	
   43	        button = create_arrow_button(gtk.ARROW_UP, gtk.SHADOW_IN)
   44	        box.pack_start(button, gtk.FALSE, gtk.FALSE, 3)
   45	        self.tooltips.set_tip(button, "SHADOW_IN")
   46	
   47	        button = create_arrow_button(gtk.ARROW_DOWN, gtk.SHADOW_OUT)
   48	        box.pack_start(button, gtk.FALSE, gtk.FALSE, 3)
   49	        self.tooltips.set_tip(button, "SHADOW_OUT")
   50	  
   51	        button = create_arrow_button(gtk.ARROW_LEFT, gtk.SHADOW_ETCHED_IN)
   52	        box.pack_start(button, gtk.FALSE, gtk.FALSE, 3)
   53	        self.tooltips.set_tip(button, "SHADOW_ETCHED_IN")
   54	  
   55	        button = create_arrow_button(gtk.ARROW_RIGHT, gtk.SHADOW_ETCHED_OUT)
   56	        box.pack_start(button, gtk.FALSE, gtk.FALSE, 3)
   57	        self.tooltips.set_tip(button, "SHADOW_ETCHED_OUT")
   58	
   59	        window.show()
   60	
   61	def main():
   62	    gtk.main()
   63	    return 0
   64	
   65	if __name__ == "__main__":
   66	    tt = Tooltips()
   67	    main()

Hay otros métodos que se pueden usar con las pistas. Simplemente los listaremos, junto con una breve descripción sobre su función.

  tooltips.enable()

Activa un conjunto de pistas desactivadas.

  tooltips.disable()

Desactiva un conjunto de pistas activadas.

  tooltips.set_delay(delay)

Fija los milisegundos que deben transcurrir con el puntero sobre el control antes de que la pista aparezca. El valor predefinido es de 500 milisegundos (medio segundo).

Y esos son todos los métodos asociados con las pistas. Más de lo que siempre se querría saber :-)