[Python,Gtk4] Gtk.ColorDialogの使用について

目標

 Gtk.ColorDialogは、Gtkの4.10から追加された色を選択するためのダイアログです。今回は、Gtk.ColorDialogを使用した色の選択と選択した色情報の取得方法について紹介します。

Gtk.ColorDialogの定義

 Gtk.ColorDialogの定義は以下のようにおこないます。

        colordialog = Gtk.ColorDialog(
            title='色の選択', modal=True,
            with_alpha=False,
        )
内容
modalboolGtk.ColorDialogがモーダルかどうかを指定する 
titlestrGtk.ColorDialogに表示するタイトルを指定する
with_alphabool色にアルファ (半透明) が含まれるかどうかを指定する。
Falseにした場合、Gtk.ColorDialogの’作成した色’に
alphaの値を指定できるようになる。
`Gtk.ColorDialogのプロパティ

選択した色のRGB値の取得

 Gtk.ColorDialogで選択した色を取得する作業は、以下の手順でおこないます。
 1. メソッドchoose_rgbaによりファイルダイアログを表示する。
 2. 関数on_colordialog_choose_rgba(1.で指定)内で、メソッドchoose_rgba_finishにより
  選択したファイル(戻り値は、Gdk.RGBAもしくはNone)を取得する。
 3. 取得したGdk.RGBAより色情報を取得する。

        colordialog.choose_rgba(
            parent=self,
            cancellable=None,
            callback=self.on_colordialog_choose_rgba,
        )


    def on_colordialog_choose_rgba(self, dialog, result):
        try:
            color = dialog.choose_rgba_finish(result)
            print(f'R={color.red:.3f}, G={color.green:.3f}, '
                  + f'B={color.blue:.3f}')
        except GLib.GError:
            return

サンプルプログラム

 以下のプログラムを実行すると、左図のようなウィンドウが表示されます。ウィンドウ内の`Gtk.ColorDialoの表示`ボタンを押すと、右図のようなGtk.ColorDialogが表示されます。
 Gtk.ColorDialogで色を選択してOkボタンを押すと、ターミナルに選択した色情報を表示します。

import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, Gdk, GLib


APPID = 'com.github.taniyoshima.g4_fblog_colordialog'


class Gtk4TestTest(Gtk.Window):

    def __init__(self, app):
        Gtk.Window.__init__(
            self, application=app, title='ColorDialog Test',
            default_width=400, default_height=80)

        button = Gtk.Button(
            label='Gtk.ColorDialogの表示',
            margin_top=20, margin_bottom=20,
            margin_start=20, margin_end=20,
        )
        button.connect('clicked', self.on_button_clicked)

        self.set_child(button)

    def on_button_clicked(self, button):
        colordialog = Gtk.ColorDialog(
            title='色の選択', modal=True,
            with_alpha=False,
        )
        colordialog.choose_rgba(
            parent=self,
            cancellable=None,
            callback=self.on_colordialog_choose_rgba,
        )

    def on_colordialog_choose_rgba(self, dialog, result):
        try:
            color = dialog.choose_rgba_finish(result)
            print(f'R={color.red:.3f}, G={color.green:.3f}, '
                  + f'B={color.blue:.3f}')
        except GLib.GError:
            return


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をコピーしました