我编写了一个小型 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 字符映射到物理键盘键。尽情享受吧。