【问题标题】:How to manage two threads, pynput mouse listener and while loop?如何管理两个线程,pynput鼠标监听器和while循环?
【发布时间】:2019-12-28 07:19:24
【问题描述】:

我有一个鼠标监听器:

from pynput.mouse import Listener, Button

def on_click(x, y, button):
    if button == Button.left:
    xy_dict["x"] = x
    xy_dict["y"] = y
    if button == Button.right:
        raise MyException(button)

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

我也有来自其他脚本的main() 函数。假设main() 从鼠标监听器中获取xy,但是我怎样才能将这两个线程联合起来呢?

【问题讨论】:

    标签: python python-3.x multithreading pynput


    【解决方案1】:

    上下文管理器方法(即with)仅在您希望能够停止侦听器时才有用。如果不需要,只需启动监听器:

    listener = Listener(on_click=on_click)
    listener.start()
    

    它会自动作为一个新线程启动:

    https://pythonhosted.org/pynput/mouse.html#monitoring-the-mouse

    鼠标侦听器是threading.Thread,所有回调都将从线程中调用。

    访问xy 值的最简单方法是将其包装在一个类中并在处理程序中更新实例属性;或定义两个全局变量(xy)。

    【讨论】:

    • 我还要补充一点,listener.stop() 可以在程序结束时用来停止线程。在.stop() 之后我们可以使用listener.join()
    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 2014-12-13
    • 2014-02-21
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2021-10-28
    • 2015-11-30
    相关资源
    最近更新 更多