【问题标题】:Simulate Mouse Clicks on Python在 Python 上模拟鼠标点击
【发布时间】:2011-04-02 11:51:21
【问题描述】:

我目前正在让我的 Nintendo Wiimote(实际上有点难过)与我的电脑一起作为鼠标工作。我已经设法让双节棍的摇杆控制实际上在屏幕上上下左右移动鼠标!这太令人兴奋了。现在我被困住了。

当我按A时,我想通过python左/右键单击东西,当我去搜索时,它想出的只是tkinter?

所以我的问题是,我该怎么调用才能让python在桌面上左/右键单击,如果可能的话,也许提供一个sn-p?

感谢您的帮助!

注意:我想我忘了说这是针对 Linux 的。

【问题讨论】:

  • 这可能取决于操作系统/窗口系统。理想情况下,将有 python 绑定到您的操作系统窗口系统。通常,参数与实际编写文档的 C/C++/C#/Objective-C 调用非常相似。或者您可能会走运并拥有实际的 python 文档。至少发布您正在使用的操作系统,以便人们可以提供帮助。
  • 可能这个答案不相关,但也许你可以检查 Sikuli 项目源。它是 jython 但是...
  • 看起来是个不错的项目。你用什么来移动鼠标?您是通过 Python 还是以其他方式进行操作?当然,在哪个 OS/DE/WM 上?顺便说一句,前段时间,我发现了一个 Xorg 驱动程序,它应该允许将 Wiimote 用作鼠标(用于 ir-pen 交互式白板项目),也许它可以完成这项工作..?
  • 我在 python 上使用 libX11 移动鼠标。我不能使用 IR,所以这就是为什么我需要能够点击。
  • github.com/msanders/autopy#readme 这是另一个问题,它模拟鼠标点击。也许你可以看看他们是如何做到的。

标签: python linux mouse mouse-cursor wiimote


【解决方案1】:

您可以使用现在与PyUserInput 合并的PyMouse。我是通过 pip 安装的:

  1. apt-get install python-pip

  2. pip install pymouse

在某些情况下,它使用光标,而在其他情况下,它在没有光标的情况下模拟鼠标事件。

from pymouse import PyMouse

m = PyMouse()
m.position() #gets mouse current position coordinates
m.move(x,y)
m.click(x,y) #the third argument "1" represents the mouse button
m.press(x,y) #mouse button press
m.release(x,y) #mouse button release

您还可以指定要使用的鼠标按钮。前左键:

m.click(x,y,1)

请记住,在 Linux 上它需要 Xlib。

【讨论】:

  • Pymouse ModuleNotFoundError: No module named unix 尝试安装pynput
【解决方案2】:

PyAutoGui 工作出色.. 感谢 Al Sweigart...

我的一个例子……

import pyautogui

pyautogui.FAILSAFE = False

for x in range(555, 899):
    pyautogui.moveTo(x, x)

【讨论】:

    【解决方案3】:

    您可以从 PyPI 安装 PyAutoGUI GUI 自动化模块(运行 pip install pyautogui),然后调用 pyautogui.click() 以单击屏幕的某个 X 和 Y 坐标:

    >>> import pyautogui
    >>> pyautogui.click(50, 100)
    >>> pyautogui.moveTo(200, 200)
    

    PyAutoGUI 可在 Windows、Mac 和 Linux 以及 Python 2 和 3 上运行。它还可以模拟键盘、鼠标拖动、截屏以及对截屏进行简单的图像识别。

    完整文档位于https://pyautogui.readthedocs.org/

    【讨论】:

      【解决方案4】:

      我没有看到提到这个,所以就这样吧——还有python-dogtail;见:

      它需要在 Gnome 桌面中“启用辅助技术” - 但原则上可以获得例如应用程序的 GUI 按钮的名称,并允许对它们进行虚拟点击(而不是通过 x/y 坐标)。

      【讨论】:

        【解决方案5】:

        evdev 包提供了与 Linux 中输入处理子系统部分的绑定。它也恰好包含一个到 uinput 的 Pythonic 接口。

        使用evdev发送相对运动事件和鼠标左键的示例:

        from evdev import UInput, ecodes as e
        
        capabilities = {
            e.EV_REL : (e.REL_X, e.REL_Y), 
            e.EV_KEY : (e.BTN_LEFT, e.BTN_RIGHT),
        }
        
        with UInput(capabilities) as ui:
            ui.write(e.EV_REL, e.REL_X, 10)
            ui.write(e.EV_REL, e.REL_Y, 10)
            ui.write(e.EV_KEY, e.BTN_LEFT, 1)
            ui.syn()
        

        【讨论】:

          【解决方案6】:

          【讨论】:

          • 知道如何在不使用外部库/工具的情况下完成此类任务吗?
          • @Jewenile,你可以直接操作linux uinput内核模块。您可以查看 python-uinput 源来了解它是如何实现的。 github.com/tuomasjjrasanen/python-uinput
          【解决方案7】:

          打开终端并转到 cd /usr/share/pyshared/twisted/protocols/mice
          可能这个__init__.pymouseman.py python 脚本对你有用,检查一下。

          【讨论】:

            【解决方案8】:

            您可以尝试从 Python 脚本接口XTE 程序。

            【讨论】:

              猜你喜欢
              • 2011-12-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-11-18
              • 2017-04-17
              • 1970-01-01
              相关资源
              最近更新 更多