L'Isola di Niente
L'Isola di Niente » PyGObject Tips » ラベル

ラベル

文字列の表示

GtkLabel

GtkLabel は文字列を表示するウイジェットです。
#!/usr/bin/env python3

from gi.repository import Gtk

class LabelWin(Gtk.Window):
    """
        文字列セット: label.set_text("hoge")
        文字列ゲット: s = label.get_text()
    """
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("delete-event", Gtk.main_quit)
        # ラベル
        label = Gtk.Label("文字列")
        self.add(label)
        self.show_all()

LabelWin()
Gtk.main()
DrawingArea への描写では無いので再描写要求等は気にしなくてもいいです。

又 Widget なのでパッキングすればコンテナは大きさを合わせて拡縮します。
フォントの違いや多言語アプリでもはみ出さず問題なく文字列が表示できます。

ユニークな使い方

ただ文字列を表示できるだけではないです。

文字列は C 言語同様なエスケープ・シーケンスを利用します。
たとえば途中で改行するには \n のエスケープが使えます。
ちなみに docstring を使えば改行を勝手に認識してくれます。

又回転させたり Text Attribute Markup を使ったりすることもできます。
#!/usr/bin/env python3

from gi.repository import Gtk

BR_LABEL = """改行して
右寄せ
にしていますです"""

MARKUP_LABEL = """<u>アンダーライン</u>とか
<span bgcolor="red">赤くする</span>とかもできる"""

class LabelWin(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("delete-event", Gtk.main_quit)
        # 回転
        cur = Gtk.Label("反時計回りに\n90 度回転")
        cur.set_angle(90.0)
        # 右寄せ
        br = Gtk.Label(BR_LABEL)
        br.set_justify(Gtk.Justification.RIGHT)
        # マークアップ
        markup = Gtk.Label(MARKUP_LABEL)
        markup.set_use_markup(True)
        #
        vbox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 20)
        vbox.pack_start(cur, False, False, 0)
        vbox.pack_start(br, False, False, 0)
        vbox.pack_start(markup, False, False, 0)
        self.add(vbox)
        self.show_all()

LabelWin()
Gtk.main()

img2/label.png

ニーモニック

Alt + 指定キーで特定 Widget をアクティブ化なんてこともできます。

ラベル文字列で指定キーにしたいアルファベットの直前にアンダースコアを入れる。
set_mnemonic_widget(アクティブにしたい Widget)
set_use_underline(True)

順番はどうでもかまいませんが上記処理で完了。
下記サンプルで Alt+B 等を行えばそのタブが有効になるのが解りますね。
#!/usr/bin/env python3

from gi.repository import Gtk

class LabelWin(Gtk.Window):
    """
        コレを起動して Alt+B, Alt+C, Alt+D を押してね
        タブが切り替わるのが解る
    """
    def __init__(self):
        Gtk.Window.__init__(self)
        self.connect("delete-event", Gtk.main_quit)
        note = Gtk.Notebook()
        for tab in ("Note_A", "Note_B", "Note_C", "Note_D"):
            # Label 作成
            label = Gtk.Label(tab)
            # ページ(今回はダミー)
            page = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0)
            # ニーモニック割り当て
            label.set_mnemonic_widget(page)
            label.set_use_underline(True)
            note.append_page(page, label)
        self.add(note)
        self.resize(300, 200)
        self.show_all()

LabelWin()
Gtk.main()

img2/label2.png
Copyright(C) sasakima-nao All rights reserved 2002 --- 2017.