[Python,Gtk4] Gtk.ToggleButtonの使用について② Gtk.ToggleButtonをラジオボタンのようにする

Gtk.ToggleButtonの使用②

 Gtk.ToggleButtonやGtk.CheckButtonは、ラジオボタンのように複数のボタンを1つのグループにまとめて、そのグループの内で1つのボタンだけがOnになるように指定できます。(グループ内の他のボタンを選択するとそれ以外のボタンの選択が解除されます)

 今回は、Gtk.ToggleButtonをラジオボタン化する方法について紹介します。

今回紹介する内容
 ・ Gtk.ToggleButtonをラジオボタン化する

XMLデータでGtk.TogglButtonを作成する方法についての紹介

Gtk.ToggleButtonの作成②

Gtk.ToggleButtonをラジオボタン化する

 Gtk.ToggleButtonのラジオボタン化は、以下のように2個目以降のGtk.ToggleButtonを定義する時に、プロパティgroupで指定します。groupの値は、1個目のGtk.ToggleButtonの値にします。
 ※ メソッドset_group()でも指定可能

        # 1個目のGtk.ToggleButton
        button1 = Gtk.ToggleButton(label="ボタン 1")
        button1.connect("toggled", self.on_button_toggled, "1")

        # 2個目のGtk.ToggleButton
        button2 = Gtk.ToggleButton(label="ボタン 2", group=button1) 

サンプルプログラム

 以下のサンプルプログラムを実行すると、下図のような3つのグループ化されたGtk.ToggleButtonが表示されます。Gtk.ToggleButtonの1つをOnにすると、残りの2つは自動的にOffになります。また、ターミナルにOnにしたボタンに対応したメッセージを表示します。
 例: ボタン1がオンになりました。

Gtk4で作成したGtk.ToggleButtonの画像。ラジオボタンのように機能する。(見た目は変わらない)
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()
タイトルとURLをコピーしました