[Python+Gtk4でのCSSの使用]同じ種類のWidgetに別の装飾をする

同じ種類のWidgetに別の装飾をする

 Gtk4のCCSによる装飾する場合、Widgetにプロパティnameを設定することにより、Widgetに個別の装飾をすることが可能です。この機能を利用すれば、特定のWidgetを他のものより目立たせることができ、よりユーザーにとってわかり易いインターフェイスを作成することができます。

 今回は、CSSでWidgetに個別の装飾をおこなう方法について紹介します。

Widgetごとの装飾の指定方法

 Widgetごとに装飾を変えるには、①Widgetにプロパティnameにより名前を設定して、②nameごとに装飾を指定します。

Widgetにプロパティnameにより名前を設定する

 Widgetへのプロパティnameの設定は、以下のようにおこないます。

        label1 = Gtk.Label(label='ラベル1', hexpand=True, name='label1')
        label2 = Gtk.Label(label='ラベル2', hexpand=True, name='label2')

nameごとに装飾を指定する

 nameを指定したWidgetの装飾は、「 #+(nameで指定した値) { (装飾内容): 設定値; }」の形で記入します。

#label1 {
    font-size: 20pt;
    color: blue;
    background-color: white;
}

#label2 {
    font-size: 20pt;
    color: red;
    background-color: black;
}

サンプルプログラム

 以下のプログラムを実行すると、下図のようなウィンドウおよびラベルの背景色とラベルのフォントの色を変更したウィンドウが表示されます。

#label1 {
    font-size: 20pt;
    color: blue;
    background-color: white;
}

#label2 {
    font-size: 20pt;
    color: red;
    background-color: black;
}

window {
    background-color: burlywood;
}
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, Gdk, GLib


APPID = 'com.github.taniyoshima.g4_fblog_about_css_label03'


class Gtk4TestTest(Gtk.Window):

    def __init__(self, app):
        Gtk.Window.__init__(
            self, application=app, title='CSS Test3',
            default_width=300, default_height=100)

        provider = Gtk.CssProvider()
        try:
            provider.load_from_path('main.css')
        except GLib.Error as e:
            print(f"CSSファイルの読み込み失敗 : {e} ")
            return None
        print('読み込んだCSSファイル : main.css')
        Gtk.StyleContext.add_provider_for_display(
            Gdk.Display.get_default(), provider,
            Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

        box = Gtk.Box(
            margin_top=20, margin_bottom=20,
            margin_start=20, margin_end=20,
            spacing=20,
        )
        label1 = Gtk.Label(label='ラベル1', hexpand=True, name='label1')
        label2 = Gtk.Label(label='ラベル2', hexpand=True, name='label2')

        box.append(label1)
        box.append(label2)
        self.set_child(box)


class Gtk4TestApp(Gtk.Application):

    def __init__(self):
        Gtk.Application.__init__(self, application_id=APPID)

    def do_activate(self):
        window = Gtk4TestTest(self)
        window.present()


def main():
    app = Gtk4TestApp()
    app.run()


if __name__ == '__main__':
    main()
タイトルとURLをコピーしました