2010-08-23 171 views
32

我目前正在制作我的任天堂Wiimote(实际上有点难过),以便像我的电脑一样使用鼠标。我设法让nunchuk的控制杆实际上在屏幕上上下左右移动鼠标!这太令人兴奋了。现在我卡住了。模拟Python上的鼠标点击

我想通过python左键/右键点击事物,当我按A时,当我去做搜索,它想出的所有东西都是tkinter?

所以我的问题是,我打电话让python左键/右键单击桌面上,如果可能的话,也许提供一个片段?

谢谢你的帮助!

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

+2

这将是OS /视窗系统依赖大概。理想情况下,将会有Python绑定到您的操作系统窗口系统。通常,这些参数与文档实际写入的C/C++/C#/ Objective-C调用非常相似。或者,您可能会错过并拥有实际的python文档。至少发布你的操作系统,以便人们可以提供帮助。 – aaronasterling 2010-08-23 06:48:16

+0

也许这个答案是不相关的,但也许你可以检查Sikuli项目来源。这是jython,但... – joaquin 2010-08-23 07:42:42

+0

看起来像一个不错的项目..你用什么来移动鼠标? 你是通过Python还是以其他方式做到这一点?当然,在哪个OS/DE/WM上? 顺便说一句,前些时候,我发现了一个Xorg驱动程序,它应该允许将Wiimote用作鼠标(用于ir-pen交互式白板项目),也许它可以完成这项工作。 – redShadow 2010-08-23 11:27:49

回答

2

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

2

打开终端,并转到CD的/ usr /共享/ pyshared /扭曲/协议/小鼠
可这__init__.pymouseman.py python脚本会为你工作,去看一下。

4

evdev包在Linux中为输入处理子系统的各个部分提供绑定。它也恰好包含了一个用于输入的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() 
23

您可以使用PyMouse现已合并PyUserInput。我通过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。

0

您可以安装的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/

3

PyAutoGui作品精湛的..谢谢阿尔Sweigart ...

我的一个例子...

import pyautogui 

pyautogui.FAILSAFE = False 

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