按下键时停止鼠标事件

Stop mouse event when pressing key

我的代码使用鼠标事件发送消息,但我不知道如何停止使用 f1 键。在Events()中没有找到Listener()中的stop()方法。

import pynput
import pyautogui
import time
from pynput import mouse
from pynput import keyboard


running = True
mouse_event = mouse.Events()
def on_press(key):
    global running
    if key == keyboard.Key.f1:
        running = False
        print('end')
        return False
def msg():
    mouse_event.start()


    for event in mouse_event:
        if running:
            if isinstance(event,mouse.Events.Click):
                if not event.pressed:
                    pyautogui.typewrite('hello world\n',interval=0.009)
        else:
            time.sleep(1)
            return False
while 1:
    print("Choose the desired option")
    print("1. Message")
    option = int(input("Option:"))
    if option == 1:

            running = True

            with keyboard.Listener(on_press=on_press) as listener:
                if running:
                    msg()
                    
                elif not listener.running:
                    
                    time.sleep(2)
                    break

有没有办法通过按键中断鼠标事件?

一种尝试是将方法作为 on_press 传递给 Events () 不起作用。

我过去不得不做类似的事情,最后我使用 threading 让一个线程监听 mouse/keyboard 输入,而另一个线程运行我的主程序。

import time
from pynput import keyboard
from threading import Thread


def exit_program():
    def on_press(key):        
        if str(key) == 'Key.f1':
            
            main.status = 'pause'
            user_input = input('Program paused, would you like to continue? (y/n) ')

            while user_input != 'y' and user_input != 'n':
                user_input = input('Incorrect input, try either "y" or "n" ')

            if user_input == 'y':
                main.status = 'run'

            elif user_input == 'n':
                main.status = 'exit'
                exit()

    with keyboard.Listener(on_press=on_press) as listener:
        listener.join()


def main():
    main.status = 'run'

    while True:
        print('running')
        time.sleep(1)

        while main.status == 'pause':
            time.sleep(1)

        if main.status == 'exit':
            print('Main program closing')
            break


Thread(target=main).start()
Thread(target=exit_program).start()