日別アーカイブ: 2022/05/09

GTK4: ShortcutAction

前回 Gtk::Shortcut で SignalAction や ActivateAction を使いました。
これらは ShortcutAction のサブクラス、それらから必要なものを選びます。
名前でどういう用途かはだいたい解りますよね。

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