Python GTK+3 チュートリアル

07. ラベル

Gtkチュートリアル第7章はラベルを勉強します。


7. ラベル

ラベルは編集不可のテキストをウィンドウに配置するための主な方法です。例えば Gtk.Entry ウィジェットの隣にタイトルを配置します。テキストはコンストラクタで指定するか、後から Gtk.Label.set_text() メソッドや Gtk.Label.set_markup() メソッドで指定できます。

ラベルの幅は自動的に調整されます。ラベル文字列に改行("\n")を入れて複数行のラベルも作成できます。

ラベルは Gtk.Label.set_selectable() で選択可能にできます。選択可能なラベルを使うとユーザはラベルの内容をクリップボードにコピーすることができます。エラー・メッセージなど有用な情報をコピーするためにのみ選択可能にするべきです。

ラベルテキストは Gtk.Label.set_justify() メソッドを使って均等配置できます。ウィジェットは行の折り返しも可能で、Gtk.Label.set_line_wrap() で有効にします。

Gtk.Label はいくつかの簡単な書式設定をサポートしています。例えば、テキストを太字にしたり、色をつけたり、大きくしたりすることができます。書式を設定するには Gtk.Label.set_markup() the Pango Markup syntax で定められている文字列を指定します。例えば、太字のテキスト(<b> </b>)や取り消し線のテキスト(<s> </s>)などです。さらに、Gtk.Label はクリック可能なハイパーリンクをサポートしています。リンクのマークアップは HTML から借りてきたもので、“a と href”と “title” 属性を使っています。 GTK+ は、リンクをウェブブラウザで表示されるのと同じように色付き・下線付きのテキストで表示します。“title” 属性はリンクのツールチップとして表示されます。

label.set_markup("Go to <a href="https://www.gtk.org" title="Our website">GTK+ website</a> for more")

ラベルにはニーモニックが含まれている場合があります。ニーモニックとは、ラベル内の下線付きの文字のことで、キーボードのナビゲーションに使用されます。ニーモニックは、"_File” のようなニーモニック文字の前にアンダースコアを含む文字列を Gtk.Label.new_with_mnemonic() Gtk.Label.set_text_with_mnemonic() に渡すことで生成されます。ニーモニックは、Gtk.Button のようなラベルが内部にあってクティブ化可能なウィジェットを自動的にアクティブにします。ラベルがニーモニックのターゲットウィジェットの中にない場合は、Gtk.Label.set_mnemonic_widget() を使用してターゲットがどれなのかをラベルに伝える必要があります。

7.1. 例

ラベル
# tut07.py
# ラベルの例

import gi

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


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

        hbox = Gtk.Box(spacing=10)
        # homogeneous (all children are the same size)
        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("これはふつうのラベルです")
        vbox_left.pack_start(label, True, True, 0)

        label = Gtk.Label()
        label.set_text("これは左寄せで\n改行あり。")
        label.set_justify(Gtk.Justification.LEFT)
        vbox_left.pack_start(label, True, True, 0)

        label = Gtk.Label("これは右寄せで\n改行。")
        label.set_justify(Gtk.Justification.RIGHT)
        vbox_left.pack_start(label, True, True, 0)

        label = Gtk.Label(
            "これは、行の折り返しがあるラベルの例です。 "
            "割り当てられた幅全体を取らずに収まるよう、自動的に単語を折り返します。"
            "複数の段落を正しくサポートし、表示に必要なスペースを正しく追加します。"
        )
        label.set_line_wrap(True)
        label.set_selectable(True)
        vbox_right.pack_start(label, True, True, 0)

        label = Gtk.Label(
            "これは行の折り返しがあり、1行が割り当てられた幅いっぱいに表示される例です。\n"
            "日本語 の 場合 は 分かち書き すれば OK? 使う 機会 は なさげ\n"
            "It should be taking "
            "up the entire width allocated to it."
        )
        label.set_line_wrap(True)
        label.set_justify(Gtk.Justification.FILL)
        label.set_selectable(True)
        vbox_right.pack_start(label, True, True, 0)

        label = Gtk.Label()
        label.set_markup(
            "テキストは<small>小さく</small>も<big>大きく</big>もできます。"
            "<b>太字</b>、<i>斜体</i>、<a href='https://www.gtk.org'>Gtkサイトへのハイパーリンク</a>"
        )
        label.set_line_wrap(True)
        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()


関連記事