【问题标题】:pynput.mouse Listener do not stoppynput.mouse 监听器不停止
【发布时间】:2021-12-18 21:31:00
【问题描述】:

这是我给朋友的恶作剧代码,但是当我制作可执行文件时,我无法从键盘停止这个程序。

如何从键盘快捷键中停止此侦听器。我知道这是线程问题。

import sys
import pyautogui
import keyboard
from pynput.mouse import Listener
from threading import Thread

global x,y

def on_move(x, y):
    print ("Mouse moved to ({0}, {1})".format(x, y))

def on_click(x, y, button, pressed):
    try: #FOR AUTO FAIL-SAFE
        if pressed:
            print ('Mouse clicked at ({0}, {1}) with {2}'.format(x, y, button))
            pyautogui.move(x+100,y+100)
    except:
        pass

def on_scroll(x, y, dx, dy):
    print ('Mouse scrolled at ({0}, {1})({2}, {3})'.format(x, y, dx, dy))


with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
    listener.join()

while True:
    if keyboard.is_pressed("q"):
        sys.exit(0)
        break

【问题讨论】:

    标签: python listener pynput


    【解决方案1】:

    所以这是我的解决方法。我工作是因为我遇到了同样的问题: 插入:

    from pynput.keyboard import Key
    

    然后: 在 on_move()、on_click() 和 on_scroll() 中添加:

    if key == Key.f10:
        sys.exit()
    

    这将检查当你按下 f10(或者你可以改变)时,程序会退出

    您还需要将密钥作为参数传递!

    完整更新的代码是:

    import sys
    import pyautogui
    import keyboard
    from pynput.keyboard import Key
    from pynput.mouse import Listener
    from threading import Thread
    
    global x,y
    
    def on_move(key, x, y):
        print ("Mouse moved to ({0}, {1})".format(x, y))
        if key == Key.f10:
            sys.exit()
    
    def on_click(key, x, y, button, pressed):
        try: #FOR AUTO FAIL-SAFE
            if pressed:
                print ('Mouse clicked at ({0}, {1}) with {2}'.format(x, y, button))
                pyautogui.move(x+100,y+100)
        except:
            pass
        if key == Key.f10:
            sys.exit()
    
    def on_scroll(key, x, y, dx, dy):
        print ('Mouse scrolled at ({0}, {1})({2}, {3})'.format(x, y, dx, dy))
        if key == Key.f10:
            sys.exit()
    
    
    with Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener:
        listener.join()
    
    while True:
        if keyboard.is_pressed("q"):
            sys.exit(0)
            break
    

    【讨论】:

    • 这将基本上从 f10 停止此侦听器,因为 on_move()、on_click() 和 on_scroll() 在侦听器中。
    • 这很合乎逻辑但不起作用。问题:TypeError:on_move() 缺少 1 个必需的位置参数:'key'
    • @MrZ ,现在应该已经修复了,请查看upvote中的代码。
    • 对不起,不要工作。
    【解决方案2】:

    我解决了这个问题。当鼠标位置(x,y)在左上角和中间滚动时。程序自己完成。

    def on_scroll(x, y, dx, dy):
        print('Scrolled {0} at {1}'.format(
        'down' if dy < 0 else 'up',
        (x, y,dx,dy)))
        if x<100 and y<100:
            return False
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 2013-06-02
      • 2016-01-07
      • 2019-04-19
      相关资源
      最近更新 更多