mock_button.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. '''
  2. (ok)
  3. How to listen Key combination?
  4. Here is a modified version that also prints a message when you release that key combination!
  5. '''
  6. from pynput.keyboard import Listener, Key
  7. class MockButton:
  8. def __init__(self, keys: list, cb_fn):
  9. self.cb_fn = cb_fn
  10. self.combination = set(keys)
  11. # self.currently_pressed = set()
  12. self.currently_pressed = None
  13. self.is_pressed = False
  14. listener = Listener(on_press=self._on_press, on_release=self._on_release)
  15. listener.start()
  16. def _on_press(self, key):
  17. if key in self.combination:
  18. # self.currently_pressed.add(key)
  19. self.currently_pressed = key
  20. self.is_pressed = True
  21. # print('pressed!')
  22. self.cb_fn(0)
  23. def _on_release(self, key):
  24. try:
  25. self.currently_pressed = None
  26. if self.is_pressed and self.currently_pressed == None:
  27. self.is_pressed = False
  28. # print('released!')
  29. self.cb_fn(1)
  30. except KeyError:
  31. pass
  32. if __name__ == '__main__':
  33. keys = [Key.alt, Key.ctrl]
  34. cb_fn = lambda x: print(x)
  35. btn = MockButton(keys, cb_fn)
  36. input()