Tabla de contenidos
Las etiquetas son objetos de la clase Label
y se usan mucho en GTK, siendo además relativamente simples.
Los objetos Label no emiten señales ya que no tienen
una ventana X asociada. Si se necesita capturar señales, o hacer recorte, se deben
colocar dentro de un control EventBox (Caja de Eventos)
o de un control
Button (Botón).
Para crear una nueva etiqueta se usa:
label = gtk.Label(str)
El único argumento es la cadena de texto que se quiere que visualice la etiqueta. Para cambiar el texto de la etiqueta después de la creación se usa el método:
label.set_text(str)
label es la etiqueta que se creó previamente,
y str es la nueva cadena. El espacio que necesite la nueva
cadena se ajustará automáticamente si es necesario. Se pueden hacer etiquetas
multilinea poniendo saltos de linea en la cadena de la etiqueta.
Para obtener la cadena actual, se usa:
str = label.get_text()
label es la etiqueta que se ha creado, y
str es la cadena que devuelve. El texto de una etiqueta
en label se puede justificar usando:
label.set_justify(jtype)
Los valores posibles de jtype son:
JUSTIFY_LEFT # valor predeterminado JUSTIFY_RIGHT JUSTIFY_CENTER JUSTIFY_FILL # no funciona
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 puede tomar un valor
TRUE o FALSE.
Si se quiere subrayado en la etiqueta, entonces se puede establecer un patrón para 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 cuarto y quinto. Si sólo se quiere un atajo subrayado ("mnemónico")
en la etiqueta, se debería 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. Se puede 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:
El código fuente de label.py es:
1 #!/usr/bin/env python
2
3 # ejemplo label.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8
9 class Labels:
10 def __init__(self):
11 self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
12 self.window.connect("destroy", lambda w: gtk.main_quit())
13
14 self.window.set_title("Label")
15 vbox = gtk.VBox(gtk.FALSE, 5)
16 hbox = gtk.HBox(gtk.FALSE, 5)
17 self.window.add(hbox)
18 hbox.pack_start(vbox, gtk.FALSE, gtk.FALSE, 0)
19 self.window.set_border_width(5)
20
21 frame = gtk.Frame("Normal Label")
22 label = gtk.Label("This is a Normal label")
23 frame.add(label)
24 vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
25
26 frame = gtk.Frame("Multi-line Label")
27 label = gtk.Label("This is a Multi-line label.\nSecond line\n"
28 "Third line")
29 frame.add(label)
30 vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
31
32 frame = gtk.Frame("Left Justified Label")
33 label = gtk.Label("This is a Left-Justified\n"
34 "Multi-line label.\nThird line")
35 label.set_justify(gtk.JUSTIFY_LEFT)
36 frame.add(label)
37 vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
38
39 frame = gtk.Frame("Right Justified Label")
40 label = gtk.Label("This is a Right-Justified\nMulti-line label.\n"
41 "Fourth line, (j/k)")
42 label.set_justify(gtk.JUSTIFY_RIGHT)
43 frame.add(label)
44 vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
45
46 vbox = gtk.VBox(gtk.FALSE, 5)
47 hbox.pack_start(vbox, gtk.FALSE, gtk.FALSE, 0)
48 frame = gtk.Frame("Line wrapped label")
49 label = gtk.Label("This is an example of a line-wrapped label. It "
50 "should not be taking up the entire "
51 "width allocated to it, but automatically "
52 "wraps the words to fit. "
53 "The time has come, for all good men, to come to "
54 "the aid of their party. "
55 "The sixth sheik's six sheep's sick.\n"
56 " It supports multiple paragraphs correctly, "
57 "and correctly adds "
58 "many extra spaces. ")
59 label.set_line_wrap(gtk.TRUE)
60 frame.add(label)
61 vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
62
63 frame = gtk.Frame("Filled, wrapped label")
64 label = gtk.Label("This is an example of a line-wrapped, filled label. "
65 "It should be taking "
66 "up the entire width allocated to it. "
67 "Here is a sentence to prove "
68 "my point. Here is another sentence. "
69 "Here comes the sun, do de do de do.\n"
70 " This is a new paragraph.\n"
71 " This is another newer, longer, better "
72 "paragraph. It is coming to an end, "
73 "unfortunately.")
74 label.set_justify(gtk.JUSTIFY_FILL)
75 label.set_line_wrap(gtk.TRUE)
76 frame.add(label)
77 vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
78
79 frame = gtk.Frame("Underlined label")
80 label = gtk.Label("This label is underlined!\n"
81 "This one is underlined in quite a funky fashion")
82 label.set_justify(gtk.JUSTIFY_LEFT)
83 label.set_pattern(
84 "_________________________ _ _________ _ ______ __ _______ ___")
85 frame.add(label)
86 vbox.pack_start(frame, gtk.FALSE, gtk.FALSE, 0)
87 self.window.show_all ()
88
89 def main():
90 gtk.main()
91 return 0
92
93 if __name__ == "__main__":
94 Labels()
95 main()
Obsérvese que la etiqueta "Filled, wrapped label" no tiene justificación completa (fill justified).