我正在尝试启动和停止一个while循环按一个键(开始)和停止通过释放键。在
所以像这样:
from pynput import keyboard
global condition
condition = False
def on_press(key):
global condition
if key == keyboard.Key.cmd_r:
print('pressed cmd_r'.format(key))
condition = True
else:
print('incorrect character {0}, press cmd_r'.format(key))
def on_release(key):
global condition
print('{0} released'.format(key))
if key == keyboard.Key.cmd_r:
condition = False
#keyboard.Listener.stop
#return False
with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
while condition==True:
print "Condition true"
我不知道为什么这样不行?。。 应该在我脑子里?在
问题是当您调用
listener.join()
时,您的代码会在此时等待线程完成。但它永远不会完成,因为它总是在倾听!相反,您需要调用listener.start()
,以便线程在后台运行,您可以自由地执行您想做的事情。在在线程之间共享变量是不被普遍接受的,因此我在这里创建了一个经过修改的侦听器类,它在按下键时将变量}。然后,您可以通过调用
key_pressed
与其自身相关联,而在释放变量{listener.key_pressed
在单独的循环中随时检查该变量,从而对该变量执行任何操作请注意,如果没有像上面那样使用
time.sleep
包含延迟,则会使缓冲区过载并导致输出延迟。如果你想快点的话,就稍微延迟一下,但不是零。在您可能需要一些类似主循环的东西,其中可以包含特殊的while循环来实现这一点。在
更新1-如何?(错误)
“主循环”是一个无限循环,每0.1秒执行一次包含的指令。因此,您可以继续检查
condition
。如果condition == True
你的“特殊循环”将要执行并且在condition == False
时停止,那么“主循环”将继续执行。在更新2-实施(正确)
好的,我已经运行了代码,我发现“主循环”解决方案不在这里。目前,我有一个基于多线程的快速、经过测试的解决方案:
^{pr2}$相关问题 更多 >
编程相关推荐