目的
Gtk.CheckButtonは、Gtk.ToggleButtonを継承したWidgetであり、その違いは外観だけとなっています。Gtk.ToggleButtonがそのボタンの選択内容を横に配置したGtk.Labelに記入して使うのに対して、Gtk.CheckButtonは、そのテキストにチェックする内容を記入できます。
今回は、Gtk.CheckButtonをグループ化する方法について見ていきます。
※ Gtk.ToggleButtonと同じ内容になっています。
Gtk.CheckButtonの設定
Gtk.CheckButtonの設定は、プロパティやメソッドで変更します。Gtk.CheckButtonのプロパティは以下の6つであり、その他に継承したクラスのプロパティが使用できます。
名前 | 型 | 内容 |
---|---|---|
active | bool | チェックボタンがアクティブかどうかを指定する。 active を True に設定すると、チェック ボタンとインジケーター CSS ノードの両方に :checked: 状態が追加される。 既定値:False |
child | Gtk.Widget | 子Widgetを指定する。 既定値:None |
group | Gtk.CheckButton | このウィジェットが属するグループの チェックボタンを指定する。 既定値:None |
inconsistent | bool | チェックボタンが「中間」状態の場合を指定する。 既定値:False |
label | str | チェック ボタン内のラベルのテキストを指定する。 既定値:None |
use_underline | bool | テキストの下線の次の文字をニーモニックとして 使用するかを指定する。 既定値:False |
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 が オン になりました。’
※ 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行目でオンの場合にターミナルにテキストを表示する作業を行っています。