7. Label¶
Labels are the main method of placing non-editable text in windows, for instance
to place a title next to a Gtk.Entry
widget. You can specify the text
in the constructor, or later with the Gtk.Label.set_text()
or
Gtk.Label.set_markup()
methods.
The width of the label will be adjusted automatically. You can produce multi-line labels by putting line breaks (“\n”) in the label string.
Labels can be made selectable with Gtk.Label.set_selectable()
.
Selectable labels allow the user to copy the label contents to the
clipboard. Only labels that contain useful-to-copy information —
such as error messages — should be made selectable.
The label text can be justified using the Gtk.Label.set_justify()
method.
The widget is also capable of word-wrapping, which can be activated with
Gtk.Label.set_line_wrap()
.
Gtk.Label
support some simple formatting, for instance allowing you to
make some text bold, colored, or larger. You can do this by providing a string
to Gtk.Label.set_markup()
, using the
Pango Markup syntax 1.
For instance, <b>bold text</b> and <s>strikethrough text</s>
.
In addition, Gtk.Label
supports clickable hyperlinks.
The markup for links is borrowed from HTML, using the a with href and title
attributes. GTK+ renders links similar to the way they appear in web browsers,
with colored, underlined text. The title attribute is displayed as a tooltip
on the link.
label.set_markup("Go to <a href=\"https://www.gtk.org\" "
"title=\"Our website\">GTK+ website</a> for more")
Labels may contain mnemonics. Mnemonics are underlined characters in the
label, used for keyboard navigation. Mnemonics are created by providing a
string with an underscore before the mnemonic character, such as “_File”,
to the functions Gtk.Label.new_with_mnemonic()
or
Gtk.Label.set_text_with_mnemonic()
.
Mnemonics automatically activate any activatable widget the label is inside,
such as a Gtk.Button
; if the label is not inside the mnemonic’s target
widget, you have to tell the label about the target using
Gtk.Label.set_mnemonic_widget()
.
7.1. Example¶
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://docs.gtk.org/Pango/pango_markup.html