当前位置: 首页 > 知识库问答 >
问题:

在python中,当按键被按下时记录鼠标点击,当同一按键被释放时停止记录

张亦
2023-03-14

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

我写了一个代码,在按下f7的时候开始记录按键,但是当释放它的时候仍然记录按键,因为按键处于连续按下的位置,它继续启动多个监听器,数据不断冗余。

在发布f7之后,listener也没有停止

这是密码

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

x_pos = []
y_pos = []
both_pos = []
file = open("test.txt", "wb")
file.close()

def on_press(key):

    mouse_listener = mouse.Listener(on_click=on_click)
    if (key==keyboard.Key.f7):
        mouse_listener.start()
        print("done")
def on_release(key):    
    if (key==keyboard.Key.f7):
        mouse_listener.stop()
        print("closing file")
        #file.close()
def on_click(x, y, button, pressed):
    if pressed:
        print ("{0} {1}".format(x,y))
        x_pos.append("{0}".format(x,y))
        y_pos.append("{1}".format(x,y))
        #print (x_pos)
        #print (y_pos)      
        both_pos = x_pos, y_pos
        with open("temp.txt", "ab") as file:
            pickle.dump(both_pos, file)
        print(both_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]))

共有1个答案

慕容安易
2023-03-14

您没有对on_releaseon_press中相同的mouse_listener的引用。
on_press中取出mouse_listener=mouse.listener(on_click=on_click)并在on_presson_release之前定义mouse_listener

mouse_listener = mouse.Listener(on_click=on_click)

def on_press():
    # do on press stuff with mouse_listener
    pass

def on_release():
    # do on release stuff with mouse_listener
    pass 

这也可能值得将整个内容打包到一个类中

 类似资料:
  • 好的,我有一个包含PDF文件数组的解析数据库,这些文件显示在我的表视图中。当用户选择一个文件时,他会被带到所选PDF的详细视图,并给出一个“下载”选项按钮。我使用相同的数组在表视图的segue上携带信息。下面是代码的样子。 我想编程这个按钮,以启动下载到个人设备,如果任何人可以帮助我。

  • 使用Javascript / jQuery,当有人按下某个键时,我如何获得自动重复的keydown事件或等效事件? 我真正想要的是能够检查一把钥匙是否已关闭,但从这里的其他问题来看,这是不可能的。建议的解决方法似乎是记录键降和键控事件,然后假设键关闭(如果已记录键关闭事件并且没有后续键控)。 这个解决方案在我的案例中遇到了一个问题。我正在设计一个在线实验。用户应该在整个实验中按住“T”键,永远不要

  • 问题内容: 我有以下方法可以在Angular中捕获按键: 我听着 但是,我想检测何时同时按下两个键,例如和同时按下(不是一个一个又一个又一个的组合)。 最好的方法是什么? 编辑 我当时想的是: 因此,如果我有多个按键,那么我将创建正确的。但是,问题在于,现在顺序很重要(即,如果我按then ,则按is ;如果我按另一种方式按,则得到) 问题答案: 我认为广播使用过多。而是使用自定义指令?这是一个用

  • 我有一个子类JPanel的PointPanel,我想在其中实现以下行为:如果鼠标悬停在实例上,按下shift键,鼠标光标变为手光标;如果松开shift键,鼠标光标将变回默认光标。 为了实现这一点,我尝试在构造函数中添加一个: 这种方法不起作用。 包含此面板的窗口应该具有焦点,因为它是应用程序的唯一可见窗口。 我错过了什么?

  • 问题内容: 我一直在尝试找出如何 逐渐 加速按下键时的精灵,然后一旦释放键,就逐渐减速直至停止,就像 小行星上 的飞船一样。如果可能,我想在没有任何游戏引擎的情况下执行此操作。我搜索了所以这个时候,发现相关的问题,但他们并没有回答我的问题 恰好 在我看来。 到目前为止,我想到的是: 我只是不确定如何正确地编程,因为我只能想到以相同的值增加而在持有时不会逐渐加速的方法。 所以这是我的目标( 逐渐加快

  • Env:-Android6.0,华为智能手机 我的应用程序是一个IM客户端,它必须与服务器保持连接并从服务器接收消息。因此,只要网络连接可用,我就必须让它一直处于活动状态。 我使用前台服务使我的应用程序在后台保持活动状态。请参阅:android-keeping-a-background-service-alive-prevention-process-death此方法在android 4.1和4.