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の利用の利用方法は次回説明します。
名前 | 型 | 内容 |
---|---|---|
group | Gtk.ToggleButton | このウィジェットが属するグループの トグル ボタンを指定する。 既定値:None |
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が切り替わり、その状況がターミナルにテキストで表示されます。
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を使用して、作成した文章をターミナルに
表示しています。