最近、最初の Gtk3 アプリを作成することにしましたが、アクセラレーターに問題があります。アクセラレータを追加する方法は知っていますが、右矢印や左矢印などの特定のキーの操作を拒否するだけです。これは、右矢印が押されたときに GtkWindow を破棄する必要がある (しかし破棄しない) 単純なプログラムです。ただし、他のほとんどのボタンで機能します。
from gi.repository import Gtk, Gdk
keyval= 65363
w=Gtk.Window()
menubar= Gtk.MenuBar()
filemenu= Gtk.Menu()
accels= Gtk.AccelGroup()
w.add_accel_group(accels)
file= Gtk.MenuItem.new_with_mnemonic('_File')
new= Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_NEW, None)
new.add_accelerator('activate', accels, keyval, Gdk.ModifierType(0), Gtk.AccelFlags(1))
file.set_submenu(filemenu)
filemenu.append(new)
new.connect('activate', lambda a: w.destroy())
menubar.append(file)
w.add(menubar)
w.connect('destroy', Gtk.main_quit)
w.show_all()
Gtk.main()
次に、別の問題があります。ウィジェットにキーボード フォーカス (GtkEntry など) があり、アクセラレータ キーの組み合わせが押された場合、アクセラレータ アクションが実行されますが、ウィジェットはキーの押下を受け取りません。ウィジェットがフォーカスされるたびにウィンドウから AccelGroup を削除する以外に、これを防ぐ方法はありますか?