前回 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 でも確認できるはず。
なるほど、コードで模擬クリックがしたいならこの手段が使えます。
第一引数は固定なので存在理由が不明ですが今後増えるかも、ということで。
本来の使い方では無いのでしょうけど、使い道は多かったりします。