如何在我正在开发的 Gtk 应用程序中创建和使用键盘快捷键?

Agm*_*nor 9 python shortcut-keys gtk application-development

我正在使用 Python + Gtk 快速为 Ubuntu App Showdown 创建一个应用程序。我称之为 Discvur。我本来希望包含一些键盘快捷键。

在网上搜索,我找到了关于 AccelGroup 的这个页面关于 gtk_widget_add_accelerator 的这个页面,但我不明白如何开始。你能告诉我如何定义一个合适的信号,然后在我的应用程序中使用它吗?

Bry*_*yce 8

这是我的一个 Python + Gtk 应用程序中的一些代码,根据对此答案的评论进一步扩展:

self.my_accelerators = Gtk.AccelGroup()
self.entry = Gtk.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")
...

def add_accelerator(self, widget, accelerator, signal="activate"):
    """Adds a keyboard shortcut"""
    if accelerator is not None:
        #if DEBUG:
            #print accelerator, widget.get_tooltip_text()
        key, mod = Gtk.accelerator_parse(accelerator)
        widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
Run Code Online (Sandbox Code Playgroud)


Agm*_*nor 6

这是最终有效的代码。由于它高度依赖于我的开发环境 Quickly + Glade + Python + Gtk,所以我将其作为一个独立的答案。布莱斯的回答很有帮助,我与aking1012 的交流也有帮助

实际代码,在文本编辑器中:

# Accelerators
self.my_accelerators = Gtk.AccelGroup()
self.window = self.builder.get_object("discvur_window")
self.window.add_accel_group(self.my_accelerators)
self.entry = self.builder.get_object("entry1")
self.add_accelerator(self.entry, "<Control>b", signal="backspace")

…

def add_accelerator(self, widget, accelerator, signal="activate"):
    """Adds a keyboard shortcut"""
    if accelerator is not None:
        #if DEBUG:
            #print accelerator, widget.get_tooltip_text()
        key, mod = Gtk.accelerator_parse(accelerator)
        widget.add_accelerator(signal, self.my_accelerators, key, mod, Gtk.AccelFlags.VISIBLE)
        print "The accelerator is well added with the signal " + signal

def on_erasing(self, widget):
    print "It works."
Run Code Online (Sandbox Code Playgroud)

在 Glade,我在名为“discvur_window”的窗口中创建了一个名为“entry1”的 GtkEntry。在“信号”选项卡中,我为信号“退格”提供了一个名为“on_erasing”的处理程序。

现在,点击BackspaceCtrl+B使终端打印“It works.”。