Python按键组合(ctrl+;键或shift+;键)
我有一些发生按键事件的python代码,我基本上想知道是否有可能一次按下两个键,比如ctrl+a或类似的东西。这是可能的,还是我必须找到解决方法?如果这是针对GUI的Python按键组合(ctrl+;键或shift+;键),python,pygame,combinations,keydown,Python,Pygame,Combinations,Keydown,我有一些发生按键事件的python代码,我基本上想知道是否有可能一次按下两个键,比如ctrl+a或类似的东西。这是可能的,还是我必须找到解决方法?如果这是针对GUI的 from Tkinter import * class Application(Frame): def __init__(self, parent): Frame.__init__(self,parent) self.grid() self.create_widge
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()
从Tkinter导入*
课程申请(框架):
定义初始化(自身,父级):
帧。\uuuu初始化(自,父)
self.grid()
self.create_widgets()
def创建_小部件(自):
widg=文本(自身)
widg.grid(行=0,列=0)
self.bind_all(“,self.check)#检查是否按下小写字母a
self.bind_all(“,self.check)#检查是否按了大写字母a
def检查(自我、事件):#确保函数中包含事件
打印(“控制-a按下”)
root=Tk()
app=应用程序(根)
root.mainloop()
对于您应该寻找的Pygame,而不是keydown,因为keydown只发生一次,keydown会一直发生,直到释放键为止
对于按下的两个键,只需执行一个if语句
# store the result of the get_pressed() in those variables.
if key_ctrl_is_down and key_a_is_down:
dowhatever()
用于获取特殊键(如Control或Shift)的状态
get_mods()
给出一个整数,您必须使用位运算符将其与常量进行比较,如KMOD\u SHIFT
见文件:
编辑:示例
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()
顺便说一句:您可以使用KMOD\u LSHIFT
或KMOD\u RSHIFT
仅测试左档或右档
编辑: 顺便说一句:示例如何使用
get\u pressed()
- 您必须使用
和K_LSHIFT
来检查两个档位K_LSHIFT
- 如果按住SHIFT+A,它会反复打印“按下:SHIFT+A”
顺便说一句:
get_pressed()
和get_mods()
仅在以前使用过pygame.event.get()
时提供实际信息
编辑: 如何识别A、CTRL+A、SHIFT+A、ALT+A、CTRL+SHIFT+A、CTRL+ALT+A、SHIFT+ALT+A、CTRL+SHIFT+ALT+A、CTRL+SHIFT+A
顺便说一句:在我的计算机上,右Alt有问题,因为它用于本机字符。它不适用于
KMOD\u ALT
和KMOD\u RALT
哦,是的,对不起,我应该提到它是为pygame设计的,如果这有什么不同的话…@ZenLogic如果是为pygame设计的,我不知道对不起。这似乎不起作用,你能看到我的代码中有什么错误吗?它应该播放尖锐版本的音符,但仍然像只按了“a”一样播放current_played_sine={'a#':MakeSineWave(277.18)}elif event.key==pygame.K_a和pygame.key.get_mods()&pygame.KMOD_SHIFT:print current_type,277.18 current_played_sine['a#].play(-1)
可能在elif event.key==pygame.K_a和pygame.get_.key之前有
-对于SHIFT+A
,first也是正确的。如果pygame.key.get_mods()…:
insideelif event.key==pygame.K_a:
我很快就做了一个例子。请看答案中的例子。很好,这正是我所需要的,代码也很好而且干净,谢谢你alt的问题不是问题,我只计划使用SHIFT键(以后可能还有ctrl键)
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()
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()