7. Label
Etiketter är huvudmetoden för att placera ej redigerbar text i fönster, exempelvis för att placera en titel intill en Gtk.Entry
-komponent. Du kan ange texten i konstruktorn, eller senare med metoderna Gtk.Label.set_text()
eller Gtk.Label.set_markup()
.
Bredden på etiketten kommer justeras automatiskt. Du kan skapa etiketter med flera rader genom att stoppa nyrader (”\n”) i etikettsträngen.
Etiketter kan göras markerbara med Gtk.Label.set_selectable()
. Markerbara etiketter låter användaren kopiera etikettinnehållet till urklipp. Endast etiketter som innehåller information som är användbar att kopiera — så som felmeddelanden — bör göras markerbara.
Etikettexten kan justeras med metoden Gtk.Label.set_justify()
. Komponenten kan också radbryta, vilket kan aktiveras med Gtk.Label.set_line_wrap()
.
Gtk.Label
stöder viss enkel formatering, exempelvis låter den dig göra text fet, färgad eller större. Du kan göra detta genom att tillhandahålla en sträng till Gtk.Label.set_markup()
, med Pango Markup-syntaxen [1]. Exempelvis <b>fet text</b> och <s>genomstruken text</s>
. Dessutom stöder Gtk.Label
klickbara hyperlänkar. Markup för länkar har lånats från HTML, och använder ”a” med attributen href och title. GTK+ renderar länkar liknande hur de visas i webbläsare, med färgad, understruken text. Attributet title visas som en inforuta över länken.
label.set_markup("Go to <a href=\"https://www.gtk.org\" "
"title=\"Our website\">GTK+ website</a> for more")
Etiketter kan innehålla snabbtangenter. Snabbtangenter är understrukna tecken i etiketten, använda för tangentbordsnavigering. Snabbtangenter skapas genom att tillhandahålla en sträng med ett understreck innan tecknet för snabbtangenten, så som ”_Arkiv”, till funktionerna Gtk.Label.new_with_mnemonic()
eller Gtk.Label.set_text_with_mnemonic()
. Snabbtangenter aktiverar automatiskt alla aktiverbara komponenter som etiketten är i, så som en Gtk.Button
; om etiketten inte är inuti snabbtangentens målkomponent, så kommer du behöva säga till etiketten om målet med Gtk.Label.set_mnemonic_widget()
.
7.1. Exempel
1import gi
2
3gi.require_version("Gtk", "3.0")
4from gi.repository import Gtk
5
6
7class LabelWindow(Gtk.Window):
8 def __init__(self):
9 super().__init__(title="Label Example")
10
11 hbox = Gtk.Box(spacing=10)
12 hbox.set_homogeneous(False)
13 vbox_left = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
14 vbox_left.set_homogeneous(False)
15 vbox_right = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
16 vbox_right.set_homogeneous(False)
17
18 hbox.pack_start(vbox_left, True, True, 0)
19 hbox.pack_start(vbox_right, True, True, 0)
20
21 label = Gtk.Label(label="This is a normal label")
22 vbox_left.pack_start(label, True, True, 0)
23
24 label = Gtk.Label()
25 label.set_text("This is a left-justified label.\nWith multiple lines.")
26 label.set_justify(Gtk.Justification.LEFT)
27 vbox_left.pack_start(label, True, True, 0)
28
29 label = Gtk.Label(
30 label="This is a right-justified label.\nWith multiple lines."
31 )
32 label.set_justify(Gtk.Justification.RIGHT)
33 vbox_left.pack_start(label, True, True, 0)
34
35 label = Gtk.Label(
36 label="This is an example of a line-wrapped label. It "
37 "should not be taking up the entire "
38 "width allocated to it, but automatically "
39 "wraps the words to fit.\n"
40 " It supports multiple paragraphs correctly, "
41 "and correctly adds "
42 "many extra spaces. "
43 )
44 label.set_line_wrap(True)
45 label.set_max_width_chars(32)
46 vbox_right.pack_start(label, True, True, 0)
47
48 label = Gtk.Label(
49 label="This is an example of a line-wrapped, filled label. "
50 "It should be taking "
51 "up the entire width allocated to it. "
52 "Here is a sentence to prove "
53 "my point. Here is another sentence. "
54 "Here comes the sun, do de do de do.\n"
55 " This is a new paragraph.\n"
56 " This is another newer, longer, better "
57 "paragraph. It is coming to an end, "
58 "unfortunately."
59 )
60 label.set_line_wrap(True)
61 label.set_justify(Gtk.Justification.FILL)
62 label.set_max_width_chars(32)
63 vbox_right.pack_start(label, True, True, 0)
64
65 label = Gtk.Label()
66 label.set_markup(
67 "Text can be <small>small</small>, <big>big</big>, "
68 "<b>bold</b>, <i>italic</i> and even point to "
69 'somewhere in the <a href="https://www.gtk.org" '
70 'title="Click to find out more">internets</a>.'
71 )
72 label.set_line_wrap(True)
73 label.set_max_width_chars(48)
74 vbox_left.pack_start(label, True, True, 0)
75
76 label = Gtk.Label.new_with_mnemonic(
77 "_Press Alt + P to select button to the right"
78 )
79 vbox_left.pack_start(label, True, True, 0)
80 label.set_selectable(True)
81
82 button = Gtk.Button(label="Click at your own risk")
83 label.set_mnemonic_widget(button)
84 vbox_right.pack_start(button, True, True, 0)
85
86 self.add(hbox)
87
88
89window = LabelWindow()
90window.connect("destroy", Gtk.main_quit)
91window.show_all()
92Gtk.main()