Capítulo 9. Miscelanea de Controles

Tabla de contenidos

9.1. Etiquetas
9.2. Flechas
9.3. El Objeto Pistas
9.4. Barras de Progreso
9.5. Diálogos
9.6. Imágenes
9.6.1. Pixmaps
9.7. Reglas
9.8. Barras de Estado
9.9. Entradas de Texto
9.10. Botones Aumentar/Disminuir
9.11. Lista Desplegable
9.12. Calendario
9.13. Selección de Color
9.14. Selectores de Fichero
9.15. Diálogo de Selección de Fuentes

9.1. Etiquetas

Las Labels (Etiquetas) se usan un montón en GTK, y son relativamente simples. Las Labels (Etiquetas) no emiten señales ya que no tienen ninguna ventana X asociada. Si necesitas capturar señales, o hacer recorte, ponlas dentro de un control EventBox (Caja de Eventos) o de un control Button (Botón).

Para crear una nueva etiqueta, usa:

  label = gtk.Label(str)

El único argumento es la cadena de texto que quieres que la etiqueta visualice. Para cambiar el texto de la etiqueta después de la creación, usa el método:

  label.set_text(str)

label es la etiqueta que has creado previamente, y str es la nueva cadena. El espacio que necesite la nueva cadena se ajustará automáticamente si es necesario. Puedes hacer etiquetas multilinea poniendo saltos de linea en la cadena de la etiqueta.

Para obtener la cadena actual, usa:

  str = label.get_text()

label es la etiqueta que has creado, y str es la cadena que devuelve. El texto de una etiqueta se puede justificar usando:

  label.set_justify(jtype)

Los valores para jtype son:

  JUSTIFY_LEFT
  JUSTIFY_RIGHT
  JUSTIFY_CENTER # valor predeterminado
  JUSTIFY_FILL

El control de etiqueta también es capaz de partir el texto automáticamente. Esto se puede activar usando:

  label.set_line_wrap(wrap)

El argumento wrap toma un valor TRUE o FALSE.

Si quieres la etiqueta subrayada, entonces puedes ponerle un patrón a la etiqueta:

  label.set_pattern(pattern)

El argumento pattern (patrón) indica cómo se verá el subrayadao. Consiste en una cadena de signos de subrayado y caracteres de espacio. Un signo de subrayado indica que el caracter correspondiente en la etiqueta debe estar subrayado. Por ejemplo, la cadena "__ __" subrayaría los primeros dos caracteres y los caracteres octavo y noveno. Si sólo quieres un atajo subrayado ("mnemónico") en tu etiqueta, deberías usar set_text_with_mnemonic (str) , no set_pattern().

El programa de ejemplo label.py es un ejemplo corto para ilustrar estos métodos. Este ejemplo hace uso del control Frame (Marco) para demostrar mejor los estilos de etiqueta. Puedes ignorar esto por ahora ya que el control Frame (Marco) se explica después.

En GTK+ 2.0, el texto de la etiqueta puede contener marcas para el tipo de letra y otros atributos del texto, y las etiquetas pueden ser seleccionables (para copiar y pegar). Estas características avanzadas no se explican aqui.

La figura Figura 9.1. Ejemplos de Etiquetas ilustra el resultado de ejecutar el programa de ejemplo:

Figura 9.1. Ejemplos de Etiquetas

Ejemplos de Etiquetas

El código fuente de label.py es:

    1   #!/usr/bin/env python
    2   
    3	# example label.py
    4	
    5	import gtk
    6	
    7	class Labels:
    8	    def __init__(self):
    9	        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
   10	        self.window.connect("destroy", gtk.mainquit)
   11	
   12	        self.window.set_title("Label")
   13	        vbox = gtk.VBox(gtk.FALSE, 5)
   14	        hbox = gtk.HBox(gtk.FALSE, 5)
   15	        self.window.add(hbox)
   16	        hbox.pack_start(vbox, gtk.FALSE, gtk.FALSE, 0)
   17	        self.window.set_border_width(5)
   18	
   19	        frame = gtk.Frame("Normal Label")
   20	        label = gtk.Label("This is a Normal label")
   21	        frame.add(label)
   22	        vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
   23	  
   24	        frame = gtk.Frame("Multi-line Label")
   25	        label = gtk.Label("This is a Multi-line label.\nSecond line\n"
   26	                             "Third line")
   27	        frame.add(label)
   28	        vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
   29	  
   30	        frame = gtk.Frame("Left Justified Label")
   31	        label = gtk.Label("This is a Left-Justified\n"
   32	                             "Multi-line label.\nThird      line")
   33	        label.set_justify(gtk.JUSTIFY_LEFT)
   34	        frame.add(label)
   35	        vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
   36	  
   37	        frame = gtk.Frame("Right Justified Label")
   38	        label = gtk.Label("This is a Right-Justified\nMulti-line label.\n"
   39	                             "Fourth line, (j/k)")
   40	        label.set_justify(gtk.JUSTIFY_RIGHT)
   41	        frame.add(label)
   42	        vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
   43	
   44	        vbox = gtk.VBox(gtk.FALSE, 5)
   45	        hbox.pack_start(vbox, gtk.FALSE, gtk.FALSE, 0)
   46	        frame = gtk.Frame("Line wrapped label")
   47	        label = gtk.Label("This is an example of a line-wrapped label.  It "
   48	                             "should not be taking up the entire             "
   49	                             "width allocated to it, but automatically "
   50	                             "wraps the words to fit.  "
   51	                             "The time has come, for all good men, to come to "
   52	                             "the aid of their party.  "
   53	                             "The sixth sheik's six sheep's sick.\n"
   54	                             "     It supports multiple paragraphs correctly, "
   55	                             "and  correctly   adds "
   56	                             "many          extra  spaces. ")
   57	        label.set_line_wrap(gtk.TRUE)
   58	        frame.add(label)
   59	        vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
   60	  
   61	        frame = gtk.Frame("Filled, wrapped label")
   62	        label = gtk.Label("This is an example of a line-wrapped, filled label.  "
   63	                             "It should be taking "
   64	                             "up the entire              width allocated to it.  "
   65	                             "Here is a sentence to prove "
   66	                             "my point.  Here is another sentence. "
   67	                             "Here comes the sun, do de do de do.\n"
   68	                             "    This is a new paragraph.\n"
   69	                             "    This is another newer, longer, better "
   70	                             "paragraph.  It is coming to an end, "
   71	                             "unfortunately.")
   72	        label.set_justify(gtk.JUSTIFY_FILL)
   73	        label.set_line_wrap(gtk.TRUE)
   74	        frame.add(label)
   75	        vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
   76	  
   77	        frame = gtk.Frame("Underlined label")
   78	        label = gtk.Label("This label is underlined!\n"
   79	                             "This one is underlined in quite a funky fashion")
   80	        label.set_justify(gtk.JUSTIFY_LEFT)
   81	        label.set_pattern(
   82	            "_________________________ _ _________ _ ______     __ _______ ___")
   83	        frame.add(label)
   84	        vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
   85	        self.window.show_all ()
   86	
   87	def main():
   88	    gtk.main()
   89	    return 0
   90	
   91	if __name__ == "__main__":
   92	    Labels()
   93	    main()