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

_images/label_example.png
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk


class LabelWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="Label Example")

        hbox = Gtk.Box(spacing=10)
        hbox.set_homogeneous(False)
        vbox_left = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        vbox_left.set_homogeneous(False)
        vbox_right = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        vbox_right.set_homogeneous(False)

        hbox.pack_start(vbox_left, True, True, 0)
        hbox.pack_start(vbox_right, True, True, 0)

        label = Gtk.Label(label="This is a normal label")
        vbox_left.pack_start(label, True, True, 0)

        label = Gtk.Label()
        label.set_text("This is a left-justified label.\nWith multiple lines.")
        label.set_justify(Gtk.Justification.LEFT)
        vbox_left.pack_start(label, True, True, 0)

        label = Gtk.Label(
            label="This is a right-justified label.\nWith multiple lines."
        )
        label.set_justify(Gtk.Justification.RIGHT)
        vbox_left.pack_start(label, True, True, 0)

        label = Gtk.Label(
            label="This is an example of a line-wrapped label.  It "
            "should not be taking up the entire             "
            "width allocated to it, but automatically "
            "wraps the words to fit.\n"
            "     It supports multiple paragraphs correctly, "
            "and  correctly   adds "
            "many          extra  spaces. "
        )
        label.set_line_wrap(True)
        label.set_max_width_chars(32)
        vbox_right.pack_start(label, True, True, 0)

        label = Gtk.Label(
            label="This is an example of a line-wrapped, filled label. "
            "It should be taking "
            "up the entire              width allocated to it.  "
            "Here is a sentence to prove "
            "my point.  Here is another sentence. "
            "Here comes the sun, do de do de do.\n"
            "    This is a new paragraph.\n"
            "    This is another newer, longer, better "
            "paragraph.  It is coming to an end, "
            "unfortunately."
        )
        label.set_line_wrap(True)
        label.set_justify(Gtk.Justification.FILL)
        label.set_max_width_chars(32)
        vbox_right.pack_start(label, True, True, 0)

        label = Gtk.Label()
        label.set_markup(
            "Text can be <small>small</small>, <big>big</big>, "
            "<b>bold</b>, <i>italic</i> and even point to "
            'somewhere in the <a href="https://www.gtk.org" '
            'title="Click to find out more">internets</a>.'
        )
        label.set_line_wrap(True)
        label.set_max_width_chars(48)
        vbox_left.pack_start(label, True, True, 0)

        label = Gtk.Label.new_with_mnemonic(
            "_Press Alt + P to select button to the right"
        )
        vbox_left.pack_start(label, True, True, 0)
        label.set_selectable(True)

        button = Gtk.Button(label="Click at your own risk")
        label.set_mnemonic_widget(button)
        vbox_right.pack_start(button, True, True, 0)

        self.add(hbox)


window = LabelWindow()
window.connect("destroy", Gtk.main_quit)
window.show_all()
Gtk.main()
1

Pango Markup-syntax, https://developer.gnome.org/pygtk/stable/pango-markup-language.html