2010-08-23 167 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)