【问题标题】:Record (get) mouse click position while key is pressed and stop recording when same key is released in python按下键时记录(获取)鼠标单击位置,并在 python 中释放相同的键时停止记录
【发布时间】:2018-08-06 10:37:31
【问题描述】:

我正在创建一个脚本,如果用户按下 f7,它将开始记录鼠标点击,当他释放按钮时它应该停止,除非用户关闭程序,否则会发生这种情况。

尽管按下 f7,脚本仍打印“无”,而不是显示点击位置和“f7”,而是显示无。

在 on_press 函数中打印值时显示“f7”,但在 on_click 函数中单击鼠标按钮时显示“None”

这里是代码

from pynput import mouse, keyboard
from pynput.keyboard import Key, Listener
import pickle

x_pos = []
y_pos = []
both_pos = []

pressed_key = None

def on_press(key):
    if (key==keyboard.Key.f7):
        pressed_key = "f7"
    else:
        pressed_key = None

def on_release(key):
    pass

def on_click(x, y, button, pressed):
    if pressed:
        #print ("{0} {1}".format(x,y))
        print(pressed_key)
        if pressed_key == "f7":
            x_pos.append("{0}".format(x,y))
            y_pos.append("{1}".format(x,y))
            #print("test" + x_pos + y_pos)
            print (x_pos + y_pos)
        #both_pos = x_pos, y_pos
        else:
            pass
        print (x_pos + y_pos)


mouse_listener = mouse.Listener(on_click=on_click)
mouse_listener.start()

with keyboard.Listener(on_press = on_press, on_release = on_release) as listener:
    try:
        #listener.start()
        listener.join()
    except MyException as e:
        print('Done'.format(e.args[0]))

【问题讨论】:

    标签: python python-3.x winapi pywin32 pyhook


    【解决方案1】:

    发现问题。因为在 on_press 我没有使用 global press_key 所以它正在创建局部变量。

    这是工作代码。

    from pynput import mouse, keyboard
    from pynput.keyboard import Key, Listener
    import pickle
    
    x_pos = []
    y_pos = []
    both_pos = []
    
    pressed_key  = None
    
    def on_press(key):
        global pressed_key
        if (key==keyboard.Key.f7):
            pressed_key = "f7"
            print(pressed_key)
        else:
            pressed_key = None
    
    def on_release(key):
        global pressed_key
        pressed_key = None
    
    def on_click(x, y, button, pressed):
        if pressed:
            #print ("{0} {1}".format(x,y))
            print(pressed_key)
            if pressed_key == "f7":
                x_pos.append("{0}".format(x,y))
                y_pos.append("{1}".format(x,y))
                #print("test" + x_pos + y_pos)
                print (x_pos + y_pos)
            #both_pos = x_pos, y_pos
            else:
                pass
            print (x_pos + y_pos)
    
    
    mouse_listener = mouse.Listener(on_click=on_click)
    mouse_listener.start()
    
    with keyboard.Listener(on_press = on_press, on_release = on_release) as listener:
        try:
            #listener.start()
            listener.join()
        except MyException as e:
            print('Done'.format(e.args[0]))
    

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 1970-01-01
      • 2021-01-12
      • 2021-11-12
      • 2023-04-02
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 2019-12-31
      相关资源
      最近更新 更多