Mam trochę kodu Pythona ze zdarzeniami keydown, zastanawiam się, czy możliwe jest jednoczesne naciśnięcie dwóch klawiszy, takich jak Ctrl + A czy coś takiego . Czy to możliwe, czy też będę musiał znaleźć obejście?Kombinacje klawiszy Python (klawisz Ctrl + Shift + klawisz)
Odpowiedz
Zastosowanie pygame.key.get_mods() aby uzyskać stan klawiszy specjalnych jak Kontroli lub SHIFT.
get_mods()
daje jedną liczbę całkowitą i trzeba użyć operatory bitowe, aby porównać go ze stałymi jak KMOD_SHIFT
patrz dokumentacja: pygame.key
EDIT: przykład
import pygame
import pygame.locals
pygame.init()
screen = pygame.display.set_mode((300,200))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_a and pygame.key.get_mods() & pygame.KMOD_SHIFT:
print "pressed: SHIFT + A"
pygame.quit()
BTW : możesz użyć KMOD_LSHIFT
lub KMOD_RSHIFT
do testowania tylko z lewej strony przesunięcie lub tylko prawe przesunięcie.
EDIT:
BTW: przykład jak używać get_pressed()
- trzeba użyć
K_LSHIFT
K_LSHIFT
i sprawdzić obie zmiany. - drukować "wciśnięty: SHIFT + " znowu i znowu, jeśli trzymać SHIFT + A prasowanego.
.
import pygame
import pygame.locals
pygame.init()
screen = pygame.display.set_mode((300,200))
running = True
while running:
#
# events
#
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
#
# others
#
all_keys = pygame.key.get_pressed()
#print 'shift:', all_keys[pygame.K_LSHIFT], all_keys[pygame.K_RSHIFT]
if all_keys[pygame.K_a] and (all_keys[pygame.K_LSHIFT] or all_keys[pygame.K_RSHIFT]):
print "pressed: SHIFT + A"
pygame.quit()
BTW:get_pressed()
i get_mods()
podać aktualne informacje tylko jeśli pygame.event.get()
było wykorzystanie wcześniej.
EDIT:
Jak rozpoznać A, CTRL + A, SHIFT + , ALT + , CTRL + SHI FT + , CTRL + ALT + , SHIFT + ALT + ,, CTRL + SHIFT + ALT +
import pygame
import pygame.locals
pygame.init()
screen = pygame.display.set_mode((300,200))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
elif event.key == pygame.K_a:
mods = pygame.key.get_mods()
if mods & pygame.KMOD_CTRL and mods & pygame.KMOD_SHIFT and mods & pygame.KMOD_ALT:
print "pressed: CTRL+SHIFT+ALT + A"
elif mods & pygame.KMOD_CTRL and mods & pygame.KMOD_SHIFT:
print "pressed: CTRL+SHIFT + A"
elif mods & pygame.KMOD_CTRL and mods & pygame.KMOD_ALT:
print "pressed: CTRL+ALT + A"
elif mods & pygame.KMOD_SHIFT and mods & pygame.KMOD_ALT:
print "pressed: SHIFT+ALT + A"
elif mods & pygame.KMOD_SHIFT:
print "pressed: SHIFT + A"
elif mods & pygame.KMOD_CTRL:
print "pressed: CTRL + A"
elif mods & pygame.KMOD_ALT:
print "pressed: ALT + A"
else:
print "pressed: A"
pygame.quit()
BTW: Na moim komputerze występuje problem z Right Alt, ponieważ jest używany dla znaków rodzimych. Nie działa z KMOD_ALT
i KMOD_RALT
.
Jeśli dotyczy to GUI.
from Tkinter import *
class Application(Frame):
def __init__(self, parent):
Frame.__init__(self,parent)
self.grid()
self.create_widgets()
def create_widgets(self):
widg = Text(self)
widg.grid(row=0,column=0)
self.bind_all("<Control-a>", self.check) #This checks if lower case a is pressed
self.bind_all("<Control-A>", self.check) #This checks if upper case a is pressed
def check(self, event): #Make sure to have event inside the function
print("Control-a pressed")
root = Tk()
app = Application(root)
root.mainloop()
O tak, przepraszam, powinienem był wspomnieć, że to było dla pygame, jeśli to robi różnicę ... – ZenLogic
@ZenLogic jeśli to dla pygame Nie mam pojęcia przepraszam. –
Dla Pygame należy szukać na get_pressed zamiast keydown, bo keyDown zdarza się tylko raz, w dół, aż stanie klawisz zostanie zwolniony.
dla dwóch naciśniętych klawiszy wystarczy zrobić strzyżenie.
# store the result of the get_pressed() in those variables.
if key_ctrl_is_down and key_a_is_down:
dowhatever()
- 1. Jak sprawdzić, czy naciśnięto klawisz modyfikujący (shift, ctrl, alt)?
- 2. Jak przechwycić klawisz specjalny (alt/ctrl)?
- 3. Czy naciśnięty jest klawisz "Ctrl"?
- 4. klawisz Ctrl przechowywane w dół po symulację klawisz Ctrl klucz zdarzeń i ctrl się zdarzenie
- 5. Jak mogę wykryć klawisz shift + w javascript?
- 6. pycharm nie reaguje na klawisz CTRL skrótów
- 7. CGEventPost - przytrzymaj klawisz (przesunięcie)
- 8. Ustal, czy naciśnięty został klawisz Shift podczas mousedown zdarzenia
- 9. Jak sprawdzić, czy klawisz Insert został przytrzymany?
- 10. jQuery klawisz w górę/w dół wykrywanie klawiszy nie działa?
- 11. Sprawdź, czy klawisz Ctrl nie działa, używając C#
- 12. Python Klawisz i Key Release Listener
- 13. Python, naciśnij dowolny klawisz, aby wyjść
- 14. klawisz Shift jest ignorowany po naciśnięciu innego klawisza, słabego klawisza Shift. Jak wykryć, kiedy jest wydany?
- 15. Jak zarejestrować klawisz skrótu dla kombinacji trzech klawiszy za pomocą C#
- 16. Naciśnij klawisz z Java
- 17. Zakończenie kodu IntelliJ: klawisz ⇥?
- 18. RichTextBox i klawisz tabulatora
- 19. klawisz funkcyjny naciśnięcie klawisza
- 20. GIT i SSH, który klawisz jest używany?
- 21. Silverlight obsługi naciśnij klawisz wiele kombinacji
- 22. Klawisz skrótu Szybki edytor tagów w Aptana
- 23. Korzystanie UI klawisz skrótu W wydarzeniach hash
- 24. Jak pułapkę naciśnij dwukrotnie klawisz w javascript?
- 25. NSResponder nie odbiera zdarzenia KeyUp, gdy przytrzymano klawisz Cmd 01
- 26. Greasemonkey Javascript Naciśnij klawisz Pomoc
- 27. Ignoruj klawisz Backspace z stdin
- 28. DirectDraw + Warstwowy klawisz koloru okna?
- 29. Klawisz podstawowy Rosnąco vs malejąco
- 30. Jak powiązać klawisz spacji z pewną metodą w tkinter (python)
@ZenLogic Dodaję przykład pracy, jak z niego korzystać. – furas
To chyba nie działa, czy widzisz, co jest nie tak w moim kodzie? Powinien odtwarzać ostrą wersję notatki, ale wciąż gra tak, jakby naciśnięty był tylko "a". 'current_played_sine = { 'A #': MakeSineWave (277,18)} elsif event.key == pygame.K_a i pygame.key.get_mods() pygame.KMOD_SHIFT: druku current_type, 277,18 current_played_sine [ 'A # '] .play (-1) ' – ZenLogic
Prawdopodobnie masz' elif event.key == pygame.K_a: 'before' elif event.key == pygame.K_a i pygame.key.get_mods() '- first is true również dla 'SHIFT + A'. Zmieniłeś kolejność lub zrobiłeś 'if pygame.key.get_mods() ...:' inside 'elif event.key == pygame.K_a:' Wkrótce zrobiłem przykład. – furas