如何仅在按下某个键时触发鼠标单击?在Python中

2024-05-12

我想制作一个程序,或者当我单击某个键时,鼠标会自动单击(只要我单击该键),如果我不单击该键,它就会停止。

我不希望只在触摸按键一次时才发生点击,而是只要按住按键就发生点击(也可以像雷蛇突触鼠标一样按下鼠标左键触发点击)

任何想法 ?

EDIT 1 :

这个可以工作,但当按住某个键时不起作用(即使按住单击它也不起作用)它只检测到鼠标上的单击,然后它自己单击而不是单击ONLY当按键被按住时...

import pyautogui, time
from pynput import mouse
from pynput.mouse import Button,Controller
from tkinter import *
from tkinter import ttk


root = Tk()
root.geometry('500x400') 

combo = ttk.Combobox(root,values=['ctrl','shift','alt'],width=5)
combo.set('Key...')
combo.pack()



def on_click(x, y, button, pressed):
    if button == mouse.Button.left:
        while pressed:
            pyautogui.click()
            pyautogui.PAUSE = 0.1
        else:
            return False

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

root.mainloop()

您可以使用mouse https://pypi.org/project/mouse/模块 (pip install mouse)设置鼠标挂钩(热键),让您触发全局点击。但是,为了管理此单击的开始和结束,您将需要使用一个新线程(here https://realpython.com/intro-to-python-threading/如果您想了解更多信息,这是对线程的简短介绍)。当您按下热键时,您将想要启动一个线程。该线程将继续单击,直到您触发停止它的事件。您将通过释放热键来触发此事件。因此,当您按下热键时,线程(以及随之而来的点击)将开始,当您松开热键时,线程将结束。

下面是一段使用鼠标中键(滚动)作为热键来完成此操作的代码:

import mouse  # pip install mouse
import threading
import pyautogui

pyautogui.PAUSE = 0.1  # set the automatic delay between clicks, default is 0.1
    
def repeat_function(kill_event):
    # as long as we don't receive singal to end, keep clicking
    while not kill_event.is_set():
        pyautogui.click()

while True:
    # create the event that will kill our thread, don't trigget it yet
    kill_event = threading.Event()
    # create the thread that will execute our clicking function, don't start it yet
    new_thread = threading.Thread(target=lambda: repeat_function(kill_event))

    # set a hook that will start the thread when we press middle mouse button
    mouse.on_button(new_thread.start, (), mouse.MIDDLE, mouse.DOWN)
    # set a hook that will kill the thread when we release middle button
    mouse.on_button(kill_event.set, (), mouse.MIDDLE, mouse.UP)

    # wait for user to use the hotkey
    mouse.wait(mouse.MIDDLE, mouse.UP)
    # remove hooks that used the killed thread and start again with a new one
    mouse.unhook_all()

如果您想使用鼠标右键,请替换mouse.MIDDLE with mouse.RIGHT。我不建议使用鼠标左键作为热键,因为 pyautogui 会模拟单击此按钮并可能破坏程序。如果您想使用键盘上的某个键作为热键,请查看keyboard https://pypi.org/project/keyboard/模块。那里的概念完全相同。

请注意,在实现此代码时,在等待热键并对其进行处理时,它将无法执行任何其他操作。如果您想按原样使用它,则需要将其用作单独的 python 程序。您还可以实现此代码以在另一个程序期间在单独的线程中运行,但将其作为独立脚本启动肯定会更容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅在按下某个键时触发鼠标单击?在Python中 的相关文章

随机推荐

  • Android 和 iPhone 应用程序可以使用同一个 Facebook 应用程序 ID 吗?

    我有两个具有相同名称和相同功能的应用程序 一款在安卓市场 一款在应用商店 目前仅通过 iPhone 应用程序 您可以使用我创建的 Facebook 应用程序将您的分数发布到 Facebook 墙上 我的问题是我可以使用相同的 Android
  • 列的 SQL MAX(包括其主键)

    Short 从下面的 sql select 中 我获取了 cart id 和该购物车中最高价值商品的值 SELECT CartItems cart id MAX ItemValues value FROM CartItems INNER J
  • Listview里面只有一个Element

    您好 我正在尝试将列表视图放入列表视图中的列表视图中 唯一的问题是只有第一个列表视图正确显示所有元素 此后的每个列表视图仅包含一个元素 UPDATE 创建我自己的不可滚动列表视图解决了这个问题 https stackoverflow com
  • 如何终止 Websocket 连接?

    如何终止 Websocket 连接 我不是在谈论关闭两端的连接 而是在 中间 中断它 我需要测试重新连接时必须发生的一些应用程序逻辑 通过 SocketIO 处理 不 拔掉网络电缆不算数 因为我无法在单元测试中真正实现自动化 此外 我希望只
  • 编写 XSLT 分组

    我有一个简单的 XML 其中包含两个级别 标题和行 标签 例如
  • C 中什么函数可以替换字符串中的子字符串?

    给定一个 char 字符串 我想查找所有出现的子字符串并将其替换为备用字符串 我没有看到任何简单的函数可以实现这一点
  • 在运行时用Dagger添加Retrofit RequestInterceptor

    我正在使用匕首和改装 我用 Dagger 注入我的 Retrofit 服务 现在我想做一个授权请求来获取 accessToken 之后 我想使用请求拦截器来增强我的 api 模块 以便将此访问令牌用于将来的请求 我的想法是在收到访问令牌后使
  • Jenkins 管道和 java.nio.file.* 方法的问题

    我正在尝试使用 java nio file 中的方法在 Jenkins 管道中执行一些基本文件操作 无论代码存在于哪个节点块中 代码都在主节点上执行 在管道中 我已经验证了各个节点块都是正确的 它们唯一地标识了特定的节点 但是 pathEx
  • 设计抽象类时是否应该考虑序列化问题?

    一般来说这个问题来自Eclipse建议在抽象类上添加串行版本UID 由于该类是抽象类 因此该类的实例永远不会存在 因此它们永远不会被序列化 只有派生类才会被序列化 所以我的问题是放置一个安全 SuppressWarnings serial
  • 我可以在同一个 Azure 容器上创建和添加多少个访问策略?

    我通过搜索没有找到答案 我认为我应该能够在一个容器上创建许多存储访问策略 至少数千个 但经过测试 我的程序最多只能在一个容器上添加5个策略 然后我尝试了Microsoft Azure Storage Explorer 它也有这个限制 最多只
  • 将文件读取为 JSON

    我想读取几个文件 index html style css main js 来创建用于上传的 JSON 有效负载 我知道使用 Nodejs 我可以开始创建我想要的东西 如下所示 var fs require fs fs readFile i
  • 如何在 Windows 7 中使用 Python 廉价地创建非常大的文件? [复制]

    这个问题在这里已经有答案了 可能的重复 在Windows系统上快速创建大文件 https stackoverflow com questions 982659 quickly create large file on a windows s
  • 如何从 Visual Studio Code API 打开浏览器

    我只是在探索一种从用于开发扩展的 Visual Studio Code API 打开默认浏览器的方法 以下是我的代码 var disposable vscode commands registerCommand extension brow
  • 如何使用 SAX Java 解析器读取注释文本

    我只想使用 Java 中的 SAX 解析器读取 XML 文件中对象标记的注释 这是我的文件的摘要
  • 在请求标头中设置 Cookie Angular2

    我是 angular2 的新手 我的服务器 spring 在其响应标头中使用 set cookie 值来响应身份验证 如何将该 cookie 设置为下一次 API 调用的请求标头 我搜索了很多 但找不到合适的解决方案 作为http get
  • 如何使用全局 Key 从 Flutter 中的另一个小部件更新小部件状态?

    I have a main widget screen contain two main widgets a Header marked with red and a list marked with purple here is my c
  • Mysql:计算访问频率

    我有这张桌子 CREATE OR REPLACE TABLE hits ip bigint page VARCHAR 256 agent VARCHAR 1000 date datetime 我想计算每个页面的 googlebot 访问频率
  • 使用 NodeJS 创建 YouTube 播放列表

    我正在尝试使用 NodeJS 服务器创建 YouTube 播放列表 我已按照 Oauth 的 NodeJS 快速入门说明进行操作 如以下链接所示 https github com youtube api samples blob maste
  • Intellij IDEA 断点停止在 JAR 中,而不是我的项目的源代码中

    我在 java 文件中设置了一个断点 我通过 maven jetty 插件启动了 jetty 我设置断点的java文件也打包成JAR了 Intellij 在断点处停止 但它显示了打包到 JAR 中的文件而不是 java 文件 它的行为就像我
  • 如何仅在按下某个键时触发鼠标单击?在Python中

    我想制作一个程序 或者当我单击某个键时 鼠标会自动单击 只要我单击该键 如果我不单击该键 它就会停止 我不希望只在触摸按键一次时才发生点击 而是只要按住按键就发生点击 也可以像雷蛇突触鼠标一样按下鼠标左键触发点击 任何想法 EDIT 1 这