使用Kivy和Python,如何使用/不使用修饰符从keypress获取正确的字符?
我不想使用kivy.uix.textinput.TextInput。我只想知道用户想要输入的字符。
我可以使用从kivy.core.window.Window.request_keyboard()返回的键盘来获取当前按下的键的扫描码,但这并不考虑修饰符,即移位键。
显然我可以自己写一些东西,检查是否同时按下shift,如果是,则将其转换为相应的字符。但是这个解决方案是不可移植的,除非每个人的键盘都有与我相同的布局。
是否有某种方法可以根据系统键映射获取正确的字符?
我快速查看TextInput source,但我看不到对request_keyboard()的任何调用。
不要告诉我使用TextInput。
答案 0 :(得分:2)
您可以试试code。它按名称为您提供修饰符( Shift , Alt , Crtl 等)
如果您希望您的小部件能够收听所有输入,则无论其他小部件是否具有焦点,只需更改此内容:
def _keyboard_closed(self):
print('My keyboard have been closed!')
self._keyboard.unbind(on_key_down=self._on_keyboard_down)
self._keyboard = None
为:
def _keyboard_closed(self):
pass
这将避免小部件释放键盘,因此它会一直监听所有内容。
和
每次焦点变为true时,TextInput都会在FocusBehaviour的request_keyboard()
方法中调用_ensure_keyboard()
:
def _on_focus(self, instance, value, *largs):
if self.keyboard_mode == 'auto':
if value:
self._bind_keyboard()
....
def _bind_keyboard(self):
self._ensure_keyboard()
....
def _ensure_keyboard(self):
if self._keyboard is None:
self._requested_keyboard = True
keyboard = self._keyboard =\
EventLoop.window.request_keyboard(
self._keyboard_released, self, input_type=self.input_type)
....
我希望这对你有所帮助。
答案 1 :(得分:0)
这是一个工作示例,如何处理修改后的字符。我知道这不是正确的解决方案,但它是有效的。如果您知道正确的方法,请在下面发布...
代码:
self.indices_client.indices.put_mapping(
doc_type='child',
index=child_index,
body= {
doc_type: {
'_parent': {"type": "surveys"},
'properties': upload_models.Survey._meta.es_mapping
}
}
index=child_index
)