我用Python2.7编写了一个小例程,它会等待一段时间(比如10分钟),但如果用户按下某个键就会立即退出。在
我使用的是Windows(7,64位),所以我尝试使用msvcrt库:
import sys
import msvcrt
from time import sleep
def sleep_sec(secstosleep, allowskip = True):
waitinterval_ms = 0.050
nwaits = int(secstosleep * 1000 / waitinterval)
sys.stdout.write("\n Sleeping for %s seconds. You can press CTRL-F12 to skip.\n\n" % secstosleep)
for sl in range(0, nwaits + 1):
sleep(waitinterval_ms)
if allowskip:
# Check if User has pressed CTRL-F12 to stop waiting
if = msvcrt.kbhit():
kp = msvcrt.getch()
if kp == '\xe0':
print "\a" # Beep once
sys.stdout.write("\nSleep interrupted by User\n")
break
实际上,它工作得很好,除了当用户按F12、F11或光标向上键时它会中断:我发现如果我按F12,getch()将返回'\xe0',但似乎同样的代码也被其他提到的键返回;无法捕获CTRL、SHIFT、ALT等
我想强制用户按CTRL-F12,以避免无意中点击其中一个键而退出等待。在
我做错什么了吗?有没有一种方法可以阻止按下CTRL、ALT或SHIFT键的同时按下另一个键?在
提前谢谢你, 马克斯-意大利
来自
msvcrt
手册中的msvcrt.getch()
:只需再次调用
getch()
以获得实际的密钥码正如Daniel建议的那样,我修改了我的代码:
我还注意到,对于F12、CTRL-F12和SHIFT-F12,返回了不同的键码,因此可以很容易地识别击键。在
再次感谢你,丹尼尔!在
最大值
我建议您使用^{} 模块。它有很多特性,而且使用起来非常简单。你也可以用它来检测按键。示例:
如果要检测密钥
a
:您也可以使用它来检测组合。例如,如果要检查
^{pr2}$a
和b
是否同时按下:因此,您可以使用来检测是否按下了}:
ctrl
和{根据您发布的代码示例:
相关问题 更多 >
编程相关推荐