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: 表示のみ')
名前 | 型 | 内容 |
---|---|---|
child | Gtk.Widget | 子Widgetを指定する。 画像付きのボタンを作成するときなどに使用 既定値:None |
has_frame | bool | ボタンにフレームを付けるかを指定する。 既定値: True |
icon_name | str | ボタンに表示するアイコンの名前を指定する。 既定値:None |
label | str | ボタン内のラベルのテキストを指定する。 既定値:None |
use_underline | bool | テキストの下線の次の文字をニーモニックとして 使用するかを指定する。 既定値:False |
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はコメント表示後にウィンドウを閉じ、プログラムを終了します。
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行目: ボタンを押した場合に実行する関数を定義