目標
Gtk.ColorDialogは、Gtkの4.10から追加された色を選択するためのダイアログです。今回は、Gtk.ColorDialogを使用した色の選択と選択した色情報の取得方法について紹介します。
Gtk.ColorDialogの定義
Gtk.ColorDialogの定義は以下のようにおこないます。
colordialog = Gtk.ColorDialog(
title='色の選択', modal=True,
with_alpha=False,
)
値 | 型 | 内容 |
---|---|---|
modal | bool | Gtk.ColorDialogがモーダルかどうかを指定する |
title | str | Gtk.ColorDialogに表示するタイトルを指定する |
with_alpha | bool | 色にアルファ (半透明) が含まれるかどうかを指定する。 Falseにした場合、Gtk.ColorDialogの’作成した色’に alphaの値を指定できるようになる。 |
選択した色の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()