Paepoi

Paepoi » PyGObject Tips » Gtk(PyGObject) Tips | ラベル

Gtk(PyGObject) Tips | ラベル

# 最終更新日 2019.08.18

2019 年現在の仕様に追記と書き換え。

GtkLabel
GtkLabel は文字列を表示するウイジェットです。
DrawingArea への描写では無いので再描写要求等は気にしなくてもいいです。
又 Widget なのでパッキングすればコンテナは大きさを合わせて拡縮します。
フォントの違いや多言語アプリでもはみ出さず問題なく文字列が表示できます。

ラベルですがプロパティが沢山あり様々な表現が可能になっています。
use_markup プロパティを有効にすれば Pango によるマークアップも使えます。
Markup: Pango Reference Manual
#!/usr/bin/env python3

import sys, gi, cairo
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class Win(Gtk.ApplicationWindow):
    '''
        GtkLabel
    '''
    def __init__(self, app):
        Gtk.ApplicationWindow.__init__(self, application=app, title='Py', resizable=False)
        labels = [
            Gtk.Label(label='中心'),
            Gtk.Label(label='左寄せ', xalign=0),
            Gtk.Label(label='右寄せ', xalign=1),
            Gtk.Label(label='180度回転', angle=180),
            Gtk.Label(label='<s>打ち消し線</s>を入れたり', use_markup=True),
            Gtk.Label(label='<span bgcolor="red">赤くする</span>とか', use_markup=True),
            Gtk.Label(label='<span fgcolor="blue">青くする</span>とか', use_markup=True),
            Gtk.Label(label='<span font_weight="heavy">太くする</span>とか', use_markup=True),
            Gtk.Label(label='<span font_style="italic">italic にしたり</span>とか', use_markup=True),
            Gtk.Label(label='エスケープ文字も\n\t使えます', xalign=0),
            Gtk.Label(label='薄くする', opacity=0.3)
        ]
        #
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        for label in labels:
            vbox.pack_start(label, False, False, 0)
            vbox.pack_start(Gtk.Separator(orientation=Gtk.Orientation.HORIZONTAL), False, False, 0)
        self.add(vbox)
        self.show_all()

class App(Gtk.Application):
    def __init__(self):
        Gtk.Application.__init__(self)

    def do_startup(self):
        Gtk.Application.do_startup(self)
        Win(self)

    def do_activate(self):
        self.props.active_window.present()

app = App()
app.run(sys.argv)
widget/gtklabel.png
ニーモニック
Alt + 指定キーで特定 Widget をアクティブ化なんてこともできます。
下記サンプルで Alt+B 等を行えばそのタブが有効になるのが解りますね。
#!/usr/bin/env python3

import sys, gi, cairo
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class Win(Gtk.ApplicationWindow):
    '''
        コレを起動して Alt+B, Alt+C, Alt+D を押してね
        タブが切り替わるのが解る
    '''
    def __init__(self, app):
        Gtk.ApplicationWindow.__init__(self, application=app, title='Py')
        note = Gtk.Notebook()
        # アンダーバーの次の文字がニーモニック指定文字になる
        for tab in ['Note_A', 'Note_B', 'Note_C', 'Note_D']:
            page = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
            # mnemonic-widget プロパティにアクティブにしたい Widget を指定
            # use-underline を True
            label = Gtk.Label(label=tab, mnemonic_widget=page, use_underline=True)
            note.append_page(page, label)
        self.add(note)
        self.resize(300, 200)
        self.show_all()

class App(Gtk.Application):
    def __init__(self):
        Gtk.Application.__init__(self)

    def do_startup(self):
        Gtk.Application.do_startup(self)
        Win(self)

    def do_activate(self):
        self.props.active_window.present()

app = App()
app.run(sys.argv)
widget/gtklabel2.png
Copyright(C) sasakima-nao All rights reserved 2002 --- 2020.