窗口未激活时中断循环

2024-05-23 16:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用鼠标点击的脚本,因此控制台窗口不处于活动状态。因此,如果我想终止循环,我不能简单地使用Ctrl-C键盘中断它。你知道吗

如果按下一个键,我如何在一个循环中加入一个检查来打破它?例如,我想要这样的东西:

while True:
    if key_pressed.ascii() == 27: #escape is pressed
        break
    print('foo')

我试过使用msvcrt,但它只在窗口处于活动状态时起作用。我尝试过使用pyHook,但无法在循环中工作。你知道吗

编辑: 这里有一个例子,几乎工作的方式,我想它。但是,它不会在运行完成后正确退出(即使使用系统出口())而且在我的实际代码中实现时pygame.event.pump泵()调用似乎弄乱了循环代码。我做错什么了?你知道吗

import pyHook, pygame, sys

def OnKeyboardEvent(event):
    if event.Ascii==27:
        global shouldBreak
        shouldBreak=True

hm = pyHook.HookManager()
hm.KeyDown = OnKeyboardEvent
hm.HookKeyboard()
shouldBreak=False

pygame.init()
while True:
    pygame.event.pump()
    if shouldBreak:
        break
    #loop code
    print('foo')

#post loop code    
print('bar')
sys.exit()

Tags: 代码eventtrueiffoosyspygamepyhook