在Python中使用Kivy时,如何从带/不带修饰符的按键中获得正确的字符?
我不想使用kivy.uix.textinput.TextInput。我只想知道用户尝试输入的是什么字符。
我可以使用从kivy.core.window.Window.request_keyboard()返回的键盘来获取当前按下的键的扫描码,但这不包括修饰符,即shift键。
显然,我可以自己编写一些代码来检查是否同时按下了shift,如果是,则将其转换为相应的字符。但是,除非每个人的键盘布局都和我的一样,否则这个解决方案是不能移植的。
有没有办法根据系统的快捷键映射来获得正确的字符?
我快速查看了一下TextInput source,但没有看到任何对request_keyboard()的调用。
不要告诉我使用TextInput。
发布于 2016-11-15 17:43:38
下面是一个工作示例,说明如何处理修改后的字符。我知道这不是正确的解决方案,但它是有效的。如果你知道正确的方法,请在下面张贴…
代码:
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import StringProperty
from kivy.core.window import Window, Keyboard
from kivy.logger import Logger
class textInsert(FloatLayout):
    def __init__(self, **kwargs):
        super(textInsert, self).__init__(**kwargs)
        self.super = []
        text = StringProperty()
        ########################################
        keyboard = Window.request_keyboard(self._keyboard_released, self)
        keyboard.bind(on_key_down=self._keyboard_on_key_down, on_key_up=self._keyboard_released)
        ########################################
    #end def __init__
    def _keyboard_released(self, window, keycode):
        self.super = []
    def _keyboard_on_key_down(self, window, keycode, text, super):
        if 'lctrl' in self.super and keycode[1] == 's':
            Logger.info("Item saved, {}".format(self.super))
            self.super = []
            return False
        elif 'lctrl' not in self.super and keycode[1] in ["lctrl"]:
            self.super.append(keycode[1])
            return False
        else:
            Logger.info("key {} pressed.".format(keycode))
            return False
class ROOT(App):
   def build(self):
      return textInsert()
if __name__ == '__main__':
   ROOT().run()https://stackoverflow.com/questions/35669747
复制相似问题