创建 GTK+ 2 按键事件

创建 GTK+ 2 按键事件

我编写了一个小型 GTK+ 2+ 程序(使用 Python),它通过发送一个gtk.Event来模拟按键,以响应按钮点击。它在我拥有的每个 Ubuntu 版本(包括 Kubuntu)上都能正常工作,但在每个 Lubuntu 版本上都失败了。

在 Lubuntu 上,事件传输的字符由event.hardware_keycode;决定,event.keyval无所谓。在其他所有平台上,字符由event.keyval和决定,event.hardware_keycode无所谓。

问题是,据我所知,无法指定 Unicode 字符,event.hardware_keycode因为它们没有对应的键。Unicode 在其他平台上使用 keyval 可以正常工作。

有人知道如何让 Lubuntu 在这方面表现得与 Ubuntu 相同吗?如果不行,有人能建议一个更好的地方来发布这个问题吗?

这是一个简单的测试程序,按照 Sneetsher 的要求:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import gtk

class KeyPressTest:
    def __init__(self):
        button = gtk.Button("Test")
        button.connect('clicked', self.on_button_clicked)
        button.set_can_focus(False)
        entry = gtk.Entry()
        vbox = gtk.VBox()
        vbox.pack_start(button)
        vbox.pack_start(entry, expand=False)
        window = gtk.Window()
        window.connect('destroy', lambda w: gtk.main_quit())
        window.add(vbox)
        window.show_all()

    def on_button_clicked(self, button):
        # Lubuntu ignores keyval, so you get "a" in the entry when you click
        # the button.  Ubuntu ignores hardware_keycode, so you get À.  I could
        # make the program work on all platforms by specifying both, but what
        # is hardware_keycode for unicode characters?
        event = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
        event.keyval = int(gtk.gdk.unicode_to_keyval(ord(unicode(u"À"))))
        event.hardware_keycode = 38  # hardware keycode for "a"
        event.window = button.get_window()
        event.put()

if __name__ == "__main__":
    u = KeyPressTest()
    gtk.main()

答案如下:Lubuntu 有一个环境变量设置来指定输入法:

GTK_IM_MODULE=xim

取消设置该变量并且上述程序可以运行。

答案1

Unicode 字符没有 hardware_keycode除非您可以通过按键来输入。请参阅 xmodmap 以了解如何将 unicode 字符映射到物理键盘键。尽情享受吧。

相关内容