我想将热键添加到我的项目中。
例如:ctrl + S进行保存
我找到了一个小的工作示例。但它只测试是否按下一个键。 如何检查是否按下了多个按钮?
编辑:修饰符是一个空列表。如何使用修饰符?
这是我尝试过的代码:
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput
from kivy.uix.widget import Widget
from kivy.properties import StringProperty,ObjectProperty
from kivy.core.window import Window, Keyboard
from kivy.logger import Logger
class textInsert(FloatLayout):
def __init__(self, **kwargs):
super(textInsert, self).__init__(**kwargs)
text = StringProperty()
########################################
keyboard = Window.request_keyboard(self._keyboard_released, self)
keyboard.bind(on_key_down=self._keyboard_on_key_down)
########################################
#end def __init__
def _keyboard_released(self):
self.focus = False
def _keyboard_on_key_down(self, window, keycode, text, modifiers):
if keycode[1] in ["s","y","q","w"]:
print("its in the list")
return True
else:
print('returned false')
return False
class ROOT(App):
def build(self):
return textInsert()
if __name__ == '__main__':
ROOT().run()
最佳答案
这是一个如何处理修改字符的工作示例。我知道这不是正确的解决方案,但它有效。如果您知道正确的方法,请在下面发布...
代码:
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()
关于python - Kivy 桌面中的热键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40551774/