我正在尝试找到一种在Python中获取KeyDown和KeyUp事件的方法。使用Pygame,可以使用pygame.KEYDOWN
和pygame.KEYUP
轻松完成,但我试图找到一种不使用GUI的方法。
理想情况下,我希望能够定义一个函数isKeyDown(key)
,如果True
当前被按下,则会返回key
,如果是False
则返回while True:
if not isKeyDown("a"): #If 'a' isn't currently being pressed
print ("You are not pressing 'a'")
elif isKeyDown("a"): #If 'a' is being held down when this is run
print ("You are pressing 'a'")
print ("This is the end of this program")
break
不是,但无论如何,它将继续使用代码(它将是非阻塞的)。例如:
msvcrt.getch()
我已尝试while
,但这有两个问题:
1)它会在程序被按下之前停止程序,
2)它并没有真正告诉你键是否被按下;如果当时按下键,它只会返回。这有时可能会重合,因为Windows会在按下时重复按键,但是当msvcrt.kbhit()
循环以最大速度运行时,不太可能发生这种情况。
我还使用了1
,但如果msvcrt.getch()
按下任何键并且没有被msvcrt.getch()
读取,它会将自身设置为curses
,因此仍会遇到问题isKeyDown()
的{{1}}并没有真正返回当前是否正在按下某个键。
我使用的是Windows,因此许多人用来回答类似问题的const OptionItem = (props) => (
<div> {props.children} </div>
);
const Options = (props) => {
const children = React.Children.map(props.children, (child) => {
if (React.isValidElement(child)) {
return child;
} else {
return <OptionItem>{child}</OptionItem >
}
});
return (
<div className="options">
{children}
</div>
);
};
Options.propTypes = {
children: React.PropTypes.node
}
ReactDOM.render(
<Options>
{['First', 'Second', 'Third', 'Fourth']}
</Options > ,
document.getElementById('app')
);
模块无法使用。
有没有办法在没有GUI的Windows中定义这样的<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
函数,最好只使用内置模块?如果使用内置的Python模块无法实现这一点,那么第三方模块就可以了,只要他们不需要GUI。
即使使用Pygame或Tkinter也可以,只要关闭他们的GUI就可以了。
如果无法做到这一点,请告诉我原因,所以我可以停止寻找解决方案(过去几天我一直试图做其他事情)。
我在64位Windows 10笔记本电脑上使用Python 3.5.2。