我最近决定编写我的第一个 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 之外,还有其他方法可以防止这种情况吗?