python - Kivy 桌面中的热键

标签 python kivy

我想将热键添加到我的项目中。

例如: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/

相关文章:

python - Django queryset order_by绝对值

python - 使用mod_wsgi在网页上实时输出脚本

javascript - Selenium 和 Python 无法使用 .click() 单击 href ="javascript:void(0);"

python - Kivy:图像滚动

python - 如何使用kivyMD做笔记?

android - 如何在android中调试kivy应用程序?

python - 代码在 PyCharm 上运行,但不在 Jupyter 上运行

python - 如何即时生成文件并在下载后将其删除?

python - AttributeError: 'MyGrid' 对象没有我的函数的属性

python - Kivy:执行定时事件的更好方法(骰子滚动动画)