我有一些python代碼與keydown事件發生,我基本上想知道是否有可能有兩個鍵按下一次,如CTRL + A或類似的東西。這是可能的,還是我必須找到解決方法?Python的keydown組合(按Ctrl +鍵或Shift +鍵)
回答
使用pygame.key.get_mods()得到特殊鍵的狀態就像控制或移。
get_mods()
給出一個整數,你必須使用位運算符將其與常量像KMOD_SHIFT
見文檔比較:pygame.key
編輯:例如
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 :您可以使用KMOD_LSHIFT
或KMOD_RSHIFT
僅測試左移或僅右移。
編輯:
BTW:例如如何使用get_pressed()
-
你必須使用
- 和
K_LSHIFT
同時檢查轉變。 - 它打印 「按:SHIFT +一個」 一遍又一遍,如果你繼續SHIFT +按下一個。
K_LSHIFT
。
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()
和get_mods()
給予實際的信息只有pygame.event.get()
是在使用之前。
編輯:
如何識別一個,CTRL + 一個,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()
順便說一句:在我的電腦上有問題右Alt,因爲它用於原生字符。它不適用於KMOD_ALT
和KMOD_RALT
。
如果這是用於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()
哦,是的,對不起,我應該提到這是pygame,如果這有所作爲... – ZenLogic
@ZenLogic如果它的pygame我不知道對不起。 –
對於pygame的,你應該尋找get_pressed代替的keydown,曲子的keydown只發生一次,按下按鍵反應,直到按鍵被釋放。
兩個按鍵只是做一個if-stament。
# store the result of the get_pressed() in those variables.
if key_ctrl_is_down and key_a_is_down:
dowhatever()
- 1. 綁定Alt + Shift鍵按住Ctrl鍵
- 2. Javascript鍵盤,Shift +組合鍵
- 3. 用Ctrl,Alt,Shift +鍵
- 4. Python 2.7 - 如何檢查SHIFT-KEY或CTRL +鍵是否被按下?
- 5. 如何打開組合鍵,按Ctrl + Shift + 9,到字符串「CTRL +(」在pygame的?
- 6. 按Ctrl-Shift鍵加鍵盤快捷鍵和WPF的ListView
- 7. 按下Ctrl + Shift + Del鍵outof Firefox擴展
- 8. 如何縮進/按Ctrl + Shift + F鍵
- 9. HTML \ Javascript - 獲取ATL \ CTRL \ SHIFT鍵按
- 10. 從python CLI讀取Ctrl,Alt和Shift鍵
- 11. 處理關鍵事件Ctrl + Tab鍵和Ctrl + Shift + Tab鍵
- 12. 沒有keydown事件檢測CTRL和SHIFT鍵?
- 13. RIGHT CTRL,RIGHT SHIFT和ARROW鍵的組合不重複
- 14. Eclipse的Visual Studio中按Ctrl + Tab和Ctrl + Shift + Tab鍵等效
- 15. 發送按鍵Ctrl + Shift +用Python單擊Selenium
- 16. 按鍵javascript ctrl鍵
- 17. 按鍵模擬鍵盤按下「Shift」鍵
- 18. 如何按Ctrl-Tab和Ctrl-Shift-Tab鍵綁定在TMUX爲mintty
- 19. 綁定Ctrl + Tab鍵和Ctrl + Shift + Tab鍵在TMUX
- 20. jquery:按鍵,ctrl + c(或一些像這樣的組合)
- 21. 再結合的Eclipse快捷爲Ctrl + M鍵,Ctrl + U鍵,Ctrl + J,或Ctrl + [失敗
- 22. linux組合鍵[Ctrl +,]和[Ctrl +。]被禁用?
- 23. 帶「Ctrl,Shift或Alt」的Keydown事件不會在Windows上觸發
- 24. 如何取消綁定jQuery keydown(shift鍵)?
- 25. registerhotkey犯規引發了Shift鍵或Ctrl鍵,但適用於字母鍵
- 26. 右鍵CTRL/VK_RCONTROL上的keydown功能
- 27. Autohotkey:通過組合快速鍵合一個鍵CTRL +鍵
- 28. Vim:使用ctrl和shift之外的其他鍵將「按住」鍵盤組合? (任意修飾符)
- 29. GLUT鍵和CTRL鍵上的按鍵
- 30. JMenuItem快捷鍵Ctrl-C/Ctrl-V或Ctrl-Insert/Shift-Insert不再工作
@ZenLogic我添加工作示例如何使用它。 – furas
這似乎沒有工作,你能看到我的代碼在這裏有什麼問題嗎?它應該播放該音符的銳利版本,但仍會播放,彷彿只有'a'被按下。 'current_played_sine = { '一#':MakeSineWave(277.18)} 的elif event.key == pygame.K_a和pygame.key.get_mods()&pygame.KMOD_SHIFT: 打印current_type,277.18 current_played_sine ['一# '] .play(-1)' – ZenLogic
也許你有'elif event.key == pygame.K_a:''elif event.key == pygame.K_a和pygame.key.get_mods()'之前' - 第一個也是真的爲'SHIFT + A'。你有改變順序或者讓'if if pygame.key.get_mods()...:'在elif event.key == pygame.K_a裏面:'我很快就做出了例子。 – furas