前回 Gtk::Shortcut で SignalAction や ActivateAction を使いました。
これらは ShortcutAction のサブクラス、それらから必要なものを選びます。
名前でどういう用途かはだいたい解りますよね。
その ShortcutAction の関数を見ると activate という関数がある。
第二引数に指定した Widget に activate を送る命令みたい、コレはもしかして!
GTK4 で排除された「ボタンをコードで模擬クリック」をコイツで賄えるかも。
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
class Win(Gtk.ApplicationWindow):
'''
GTK4: Sample Code
'''
def __init__(self, a):
Gtk.ApplicationWindow.__init__(self, application=a, title='GTK4')
# Action
self.act_action = Gtk.ActivateAction()
# Button
b1 = Gtk.Button(label='Button1')
b1.connect('clicked', self.on_button1_clicked)
self.b2 = Gtk.Button(label='Button2')
self.b2.connect('clicked', self.on_button2_clicked)
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
box.append(b1)
box.append(self.b2)
self.set_child(box)
def on_button1_clicked(self, widget):
print('Button1 Clicked!')
self.act_action.activate(Gtk.ShortcutActionFlags.EXCLUSIVE, self.b2)
def on_button2_clicked(self, widget):
print('Button2 Clicked!')
def app_activate(a):
w = Win(a)
w.present()
app = Gtk.Application()
app.connect('activate', app_activate)
app.run()
Button1 を押すと Button2 も押されることが GUI でも確認できるはず。
なるほど、コードで模擬クリックがしたいならこの手段が使えます。
第一引数は固定なので存在理由が不明ですが今後増えるかも、ということで。
本来の使い方では無いのでしょうけど、使い道は多かったりします。