首页 > 解决方案 > 使用 Pynput.mouse 时无法跳出 While 循环

问题描述

我有这个相对简单的程序,它监听鼠标点击,当按住鼠标按钮时打印“1”。不幸的是,当我放开鼠标时,它只会继续打印“1”,即使有一个 if 语句检查鼠标是否被点击,如果不是,则应该停止循环。我正在使用该pynput.mouse模块进行鼠标交互。

这是我的代码:

import time
from pynput.mouse import Listener

def clicked(x, y, button, pressed):
    if pressed == True:
        while button == button.left:
            print("1")
            time.sleep(1)
            if pressed == False:
                break




with Listener(on_click=clicked) as listener:
    listener.join()

我的理论是,一旦循环开始,它就会停止监听鼠标点击,所以它永远不会停止循环。是否有必要为循环创建一个新线程?如果是,我会怎么做?

谢谢!

标签: pythonwhile-loopbreakpynput

解决方案


您当前的逻辑使您无法摆脱循环,因为pressed在循环内不会改变。没有检查鼠标是否被点击的语句:你唯一的if语句检查当你进入函数时鼠标是否被点击。 pressed在函数内不变。

看看关键逻辑:

if pressed == True:
    while ...
        ...
        if pressed == False:
            break

这里没有任何东西可以改变pressed; 第一个if保证它True在循环内的任何地方。

是的,您需要设置另一个在循环内运行的侦听器。您已经知道构建块:在函数中创建一个新块并将其绑定到另一个中断循环的操作。例如,您可能会“作弊”并将其重置pressed为全局变量。

如果您想要一个整体处理程序解决方案,您还可以在其他答案中研究如何做到这一点。keypress 和 keyrelease 已经足够频繁地完成了。


推荐阅读