[Python,Gtk4] Gtk.ToggleButtonの使用について① Gtk.ToggleButtonのtoggledイベントの設定、関数へ値を送る

Gtk.ToggleButtonの使用

 Gtk.ToggleButtonは、トグルボタン(押すたびにOn/Offが切り替わるボタン)を作成するためのWidgetです。Gtk.ToggleButtonは、Gtk.Buttonを継承しているためテキストやアイコン、Widgetを載せることが可能であり、ショートカットキーも指定することができます。

 Gtk4のconnectはシグナルと関数とを紐づけるものですが、その指定の時に関数に変数を送信するように指定することが可能です。この機能は、複数のWidgetで同じ関数を使用する場合等に区別するのに有効です。

 今回は、Gtk.ToggleButtonの作成とイベントの関数に変数を送る方法について紹介します。

今回紹介する内容
 ・ Gtk.ToggleButtonを作成する
 ・ Gtk.ToggleButtonのシグナルToggoleで変数を送る

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

Gtk.ToggleButtonの作成

Gtk.ToggleButtonを作成する

 Gtk.ToggleButtonは、以下のようにGtk.ToggleButton()なかにプロパティを記入して作成します。

        button1 = Gtk.ToggleButton(label='ボタン 1')

 Gtk.ToggleButton用のプロパティにはgroupがあり、この他にも継承したものや構造体のものをプロパティとして利用することがきます。groupの利用の利用方法は次回説明します。

名前 内容
groupGtk.ToggleButtonこのウィジェットが属するグループの
トグル ボタンを指定する。
既定値:None
Gtk.ToggleButtonのプロパティ

Gtk.ToggleButtonのシグナルToggoleで変数を送る

 関数に変数を送るのには、
  ①connectのシグナル、関数の後に送りたい値を追加で記入します。
  ②関数側に、変数を受け取るための引数を指定します。
   ※ 関数中のメソッドget_active()は、Gtk.ToggleButtonの状態を取得するものです。

  # ①の作業  ※ 変数'ボタン 1'を関数に送る。
    button1.connect("toggled", self.on_button_toggled, 'ボタン 1')

  # ②の作業  ※ 引数strで変数'ボタン 1'を受け取る 
    def on_button_toggled(self, button, str):
    # ②の作業
        if button.get_active():
            state = 'オン'
        else:
            state = 'オフ'
    # ③の作業 ※ On/Off両方の信号を使用
        print(str, 'が', state, 'になりました。')

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

 以下のサンプルプログラムを実行すると、下図のような2つのGtk.ToggleButtonが表示されます。Gtk.ToggleButtonをクリックすると、トグルボタンのOn、Offが切り替わり、その状況がターミナルにテキストで表示されます。

Gtk4で作成したGtk.ToggleButtonの画像。
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk


APPID = 'com.github.taniyoshima.g4_fblog_togglebutton'


class Gtk4TestTest(Gtk.Window):

    def __init__(self, app):
        Gtk.Window.__init__(
            self, application=app, title='Gtk.ToggleButton Test',
            default_width=350, default_height=100)

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

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

        button2 = Gtk.ToggleButton(label='ボタン 2')
        button2.connect("toggled", self.on_button_toggled, 'ボタン 2')

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

        self.set_child(box)

    def on_button_toggled(self, button, str):
        if button.get_active():
            state = 'オン'
        else:
            state = 'オフ'
        print(str, 'が', 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〜26行目: button1,butto2というGtk.ToggleButtonを定義して、それらのトグルボタンについてシグナル’toggled’と関数on_button_toggledとを紐付けています。紐付け時に、それぞれテキストを関数に送信するように指定しています。
33〜38行目: 関数on_button_toggledを定義しています。strが、変数を受け取るための引数です。
 34〜37行目: button.get_activate()によりトグルボタンの状態を取得して、その結果により
       stateに入れるテキストを変更しています。
 38行目: 送られてきたテキスト(str)とstateを使用して、作成した文章をターミナルに
       表示しています。

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