我有一些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