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

Gtk.Buttonの使用

 Gtk.Buttonは、ボタンを作成するためのWidgetです。Gtk.Buttonには、テキストやアイコン、Widgetを載せることが可能であり、ショートカットキー(Altキーと同時に押すと、そのGtk.Buttonを押したときと同じ反応をするキー)を指定することもできます。

 今回は、①Gtk.Buttonの作成方法と②Gtk.Buttonへのショートカットキーの指定方法、③Gtk.Buttonをクリックした場合のイベントの指定方法を紹介します。

今回紹介する内容
 ・ Gtk.Buttonを作成する
 ・ Gtk.Buttonにラベルやショートカットキーを追加する
 ・ Gtk.Buttonのイベント(ボタンのクリック)を指定する

Gtk.Buttonの作成

Gtk.Buttonを作成する

 Gtk.Buttonは、以下のようにGtk.Button()の中にプロパティを指定して作成します。Gtk.Buttonのプロパティには以下のものがあり、その他にも継承したものや構造体のプロがティを利用することができます。

        button1 = Gtk.Button(label='button1: 表示のみ')
名前内容
childGtk.Widget子Widgetを指定する。
画像付きのボタンを作成するときなどに使用
既定値:None
has_frameboolボタンにフレームを付けるかを指定する。
既定値: True
icon_namestrボタンに表示するアイコンの名前を指定する。
既定値:None
labelstrボタン内のラベルのテキストを指定する。
既定値:None
use_underlineboolテキストの下線の次の文字をニーモニックとして
使用するかを指定する。
既定値:False
Gtk.Buttonのプロパティ

Gtk.Buttonにラベルやショートカットキーを追加する

Gtk.Buttonに表示するテキストの指定

 Gtk.Buttonへのテキストの表示には、プロパティlabelを使用します。
 ※ メソッドset_label()でも行えます。

        button1 = Gtk.Button(label='button1: 表示のみ')

Gtk.Buttonへのショートカットキーの指定

 Gtk.Buttonへのショートカットは、①メソッドuse_underline、②メソッドnew_with_mnemonic(class: Gtk.Buttonの定義する時に使用)、③メソッドset_use_underline()の3つの方法で指定できます。

 ショートカットキー(Altキーと同時に押すキー)は、テキストの中に_(アンダーバー)とキーを記入することで指定できます。

        # Altキーと同時に押すキーがpの場合
        button2 = Gtk.Button.new_with_mnemonic('button2: 表示のみ(_p)')

Gtk.Buttonへのアイコンの指定

 Gtk.Buttonへのアイコンの表示には、プロパティicon_nameを使用します。
 ※ メソッドset_icon_name()でも行えます。

        # アイコンの指定
        button3 = Gtk.Button(icon_name='weather-clear-symbolic')

Gtk.Buttonのイベント(ボタンのクリック)を指定する

 Gtk.Buttonをクリックした時に、実行する内容は、①connectを使用してシグナルと関数とを紐付けて、②関数内に実行する内容を記述します。

①connectを使用してシグナルと関数とを紐付けている部分
        button1.connect('clicked', self.on_button1_clicked)
②関数内に実行する内容を記述している部分
    def on_button1_clicked(self, button):
        print('button1 が押されました。')

 Gtk.Buttonでは、Gtk.Buttonのシグナルである’activate’や’clicked’の他に、Gtk.WidgetやGObject.Objectのシグナルを使用できます。

Gtk.Buttonを使用したサンプルプログラム

 以下のサンプルプログラムを実行すると、下図のような4つのGtk.Buttonが表示されます。いずれのボタンも押すと、ターミナルに対応するコメントが表示されます。また、button2とbutton4は、Altキーとpもしくはqを押しても、同じようにコメントを表示します。さらに、button4はコメント表示後にウィンドウを閉じ、プログラムを終了します。

Gtk4で作成したGtk.Buttonの画像。ラベルへのテキストや画像の追加、ショートカットの設定をしている。
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk


APPID = 'com.github.taniyoshima.g4_fblog_button'


class Gtk4TestTest(Gtk.Window):

    def __init__(self, app):
        Gtk.Window.__init__(
            self, application=app, title='Gtk.Button Test',
            default_width=300, default_height=200
        )

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

        button1 = Gtk.Button(label='button1: 表示のみ')
        button1.connect('clicked', self.on_button1_clicked)

        button2 = Gtk.Button.new_with_mnemonic('button2: 表示のみ(_p)')
        button2.connect('clicked', self.on_button2_clicked)

        button3 = Gtk.Button(icon_name='weather-clear-symbolic')
        button3.connect('clicked', self.on_button3_clicked)

        button4 = Gtk.Button(label='button4: 表示と終了(_q)', use_underline=True)
        button4.connect('clicked', self.on_button4_clicked)

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

        self.set_child(box)

    def on_button1_clicked(self, button):
        print('button1 が押されました。')

    def on_button2_clicked(self, button):
        print('button2 が押されました。')

    def on_button3_clicked(self, button):
        print('アイコン[晴れ]付きボタンが押されました。')

    def on_button4_clicked(self, button):
        print('button4 が押されました。')
        self.close()


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

23行目: テキスト’button1: 表示のみ’付きのボタンを定義
24行目: button1を押した(‘clicked’)場合に、関数on_button1_clickedを実行するように指定
26行目: テキスト’button2: 表示のみ(p)’付きで、pをショートカットキーに指定したボタンを定義
27行目: button2を押した(‘clicked’)場合に、関数on_button2_clickedを実行するように指定
29行目: ’晴れ’のアイコン付きのボタン(button3)を定義
30行目: button3を押した(‘clicked’)場合に、関数on_button3_clickedを実行するように指定
32行目: テキスト’button4: 表示と終了(_q)’付きで、qをショートカットキーに指定したボタンを定義
33行目: button4を押した(‘clicked’)場合に、関数on_button4_clickedを実行するように指定

42〜53行目: ボタンを押した場合に実行する関数を定義

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