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

目的

 Gtk.CheckButtonは、Gtk.ToggleButtonを継承したWidgetであり、その違いは外観だけとなっています。Gtk.ToggleButtonがそのボタンの選択内容を横に配置したGtk.Labelに記入して使うのに対して、Gtk.CheckButtonは、そのテキストにチェックする内容を記入できます。

Gtk4でのチェックボタンとトグルボタン

 今回は、Gtk.CheckButtonをグループ化する方法について見ていきます。
 ※ Gtk.ToggleButtonと同じ内容になっています。

Gtk.CheckButtonの設定

 Gtk.CheckButtonの設定は、プロパティやメソッドで変更します。Gtk.CheckButtonのプロパティは以下の6つであり、その他に継承したクラスのプロパティが使用できます。

名前 内容
activeboolチェックボタンがアクティブかどうかを指定する。
active を True に設定すると、チェック ボタンとインジケーター CSS ノードの両方に :checked: 状態が追加される。
既定値:False
childGtk.Widget子Widgetを指定する。
既定値:None
groupGtk.CheckButtonこのウィジェットが属するグループの
チェックボタンを指定する。
既定値:None
inconsistentboolチェックボタンが「中間」状態の場合を指定する。
既定値:False
labelstrチェック ボタン内のラベルのテキストを指定する。
既定値:None
use_underlineboolテキストの下線の次の文字をニーモニックとして
使用するかを指定する。
既定値:False
Gtk.CheckButtonのプロパティ

Gtk.CheckButtonのグループ化

 Gtk.CheckButtonのグループかも、プロパティgroupを使用しておこないます。groupの値は、Gtk.CheckButtonであり、ここでは最初に定義したbutton1を指定しましす。

        button1 = Gtk.CheckButton(label="ボタン 1")
        button1.connect("toggled", self.on_button_toggled, "1")

        button2 = Gtk.CheckButton(label="ボタン 2", group=button1)
        button2.connect("toggled", self.on_button_toggled, "2")

        button3 = Gtk.CheckButton(label="ボタン 3", group=button1)
        button3.connect("toggled", self.on_button_toggled, "3")

Gtk.CheckButtonのサンプルプログラム

 以下のサンプルプログラムを実行すると、下図のような3つのGtk.CheckButtonが表示されます。それらのGtk.CheckButtonはグループ化されており、ラジオボタンのように動作します。また、そのGtk.CheckButtonをOnにすると、ターミナルにOnにしたボタンが表示されます。
 例: ‘ボタン 1 が オン になりました。’

Gtk4で作成したGtk.CheckButtonをグループ化してラジオボタンのように動作するようにしたものの画像。

 ※ Gtk.CheckButtonは、グループ化するとチェック部分の表示が変わります。

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


APPID = 'com.github.taniyoshima.g4_fblog_checkbutton2'


class Gtk4TestTest(Gtk.Window):

    def __init__(self, app):
        Gtk.Window.__init__(
            self, application=app, title='Gtk.CheckButton Test2',
            default_width=450, default_height=100)

        box = Gtk.Box(
            margin_top=20, margin_bottom=20,
            margin_start=20, margin_end=20,
            spacing=20
        )

        button1 = Gtk.CheckButton(label="ボタン 1")
        button1.connect("toggled", self.on_button_toggled, "1")

        button2 = Gtk.CheckButton(label="ボタン 2", group=button1)
        button2.connect("toggled", self.on_button_toggled, "2")

        button3 = Gtk.CheckButton(label="ボタン 3", group=button1)
        button3.connect("toggled", self.on_button_toggled, "3")

        box.append(button1)
        box.append(button2)
        box.append(button3)

        self.set_child(box)

    def on_button_toggled(self, button, name):
        if button.get_active():
            state = "オン"
            print('ボタン', name, 'が', state, 'になりました。')


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()

22〜29行目: 3つのGtk.CheckButtonを定義して、シグナル’toggled’と関数on_button_toggledとを紐付けています。紐付け時に、それぞれテキストを関数に送信するように指定しています。

37〜40行目: 関数on_button_toggled()です。38行目で押されたボタンの状態を確認して、39〜40行目でオンの場合にターミナルにテキストを表示する作業を行っています。

タイトルとURLをコピーしました