2016-11-11 6 views
1

プロジェクトにホットキーを追加したいと思います。例えばKivy-desktopのホットキー

を保存するためのCTRL + Sの私は小さな作業例を見つけました。しかし、1つのキーが押されたかどうかだけをテストします。 複数のボタンが押されたことを確認する方法はありますか?

編集:修飾子は空のリストです。修飾子はどのように使用できますか?ここで

は、私が試したコードです:私のマシン上で

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() 
+1

はあなたのコードは、現在無視 'modifiers'引数で特にCtrlキーを表示されていますか? – inclement

答えて

1

ここでは、変更された文字の処理方法の例を示します。私はそれが適切な解決策ではないことを知っていますが、それは働いています。あなたは適切な方法を知っていれば、...以下にそれを投稿してください

コード:

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() 
0

、Controlキーをmodifiersリストに格納されていないが、それは特定のキーコードを持っています。 Ctrlキーを押したときon_key_downの引数を印刷するような何かもたらすであろう私の場合は、:

私kivy版で

(<kivy.core.window.window_sdl2.WindowSDL object at 0x7fc094802360>, 305, 224, u'\u0131', [])

を、on_key_down上の一つの追加の引数は、そう、あなたのバージョンに応じてそれを調整するんでしょうがあり。ただ、参考のために、「S」キーの引数は次のとおりです。

(<kivy.core.window.window_sdl2.WindowSDL object at 0x7fc094802360>, 115, 22, u's', [])

単に複数の文で条件付きを使用し、複数のキーをバインドするには。私の場合は、次のようにします: