2009-12-22 35 views
11

Come posso controllare il mouse e la tastiera in Python?Come posso controllare la tastiera e il mouse con Python?

L'idea è di fare lo stesso come Robot() class in Java. Puoi dire: sposta il mouse da qui a qui, clicca qui, scrivi quello che c'è sullo schermo.

Per Windows c'è win32api ma sto usando principalmente Linux.

Per Linux c'è Xlib ma funziona anche per tastiera? (trovato solo riferimento al mouse)

Esiste una soluzione multipiattaforma? (Linux, Windows e anche OS X sarebbe il grande.)

+1

Python è potente, ma non credo sia abbastanza potente da permettervi di controllare una tastiera e un mouse. Mi piacerebbe molto se tu potessi effettivamente far passare il mio mouse sulla mia scrivania usando Python, ma non credo che accadrà. ;-) –

+0

una buona soluzione solo per Windows http://www.python-forum.org/pythonforum/viewtopic.php?f=2&t=8976 Sto cercando lo stesso per linux o multipiattaforma –

+3

@ Dominic può essere fatto –

risposta

1

per il mouse, ho trovato pymouse che sembra funzionare (non ho pienamente provato, un piccolo trucco necessario per lo scatto, CF le questioni)

per la tastiera, non sono certo che Xlib può fare il lavoro. Sto ancora cercando su come scrivere qualcosa, ma si può prendere evento chiave come spiegato here o in C here usando Xlib (ma non so C).

here è un esempio lavorare su gnome solo (non abbastanza buono ancora)

In pymouse, hanno un bel modo per farlo funzionare sulla piattaforma 3 diverso, ma ha bisogno di fare 3 codice ...

1

Qui è un filo interessting dal Forum Python per voi: Python Forum

Edit: C'era anche una questione interessting su StackOverflow per quanto riguarda il controllo del mouse. ..forse è un buon punto di partenza .. Mouse Control with Python

una delle risposte sta riferendosi ad un esempio Linux ... che si dirige a un bel blog.

+1

divertente, ho appena inviato lo stesso link a Dominic Rodger. Funziona solo su Windows (windll.user32.SetCursorPos non suona bene) –

1

Per console, provare ncurses o slang. In altre situazioni, prova PyQt, PyGtk, TkInter.

TUTTE queste soluzioni sono multipiattaforma e funzionano praticamente ovunque.

+0

è già triste che non riesca a trovare una soluzione per windows e linux, quindi una soluzione diversa se usi Gtk o Qt sembra non buona. e comunque non capisco cosa dici di usare. Quale metodo? come? ... –

+0

Perché Gtk o Qt sembra per te non va bene? TkInter per quanto ne so è incorporato in python di default !!! –

+0

Hm. Potrebbe essere Vuoi emulare l'azione dell'utente? –

6

Io uso dogtail (https://fedorahosted.org/dogtail/) per fare queste cose, usando questo ho creato un software di test automatizzato per la mia app linux (ubuntu). Quel framework fa clic su pulsanti e tipi in campi di testo.

vedere l'esempio gedit, https://fedorahosted.org/dogtail/browser/examples/gedit-test-utf8-procedural-api.py

Quindi basta usare Dogtail es

dogtail.rawinput.click(100, 100) 
+0

ottimo, il modulo rawinput sembra avere tutto ciò di cui ho bisogno grazie a sacco. Ho letto che per la funzione di testare realmente le app (rilevamento dei menu, ...) funziona solo per gnome. Il modulo rawinput funziona con un'altra GUI? (comunque è open source, posso dare un'occhiata) –

+0

sai perché se faccio un dogtail.rawinput.click (x, y) devo fare un dogtail.rawinput.pressKey ('a') altrimenti non succede nulla? ?? –

+0

wierd funziona su ubuntu senza alcuna pressKey –

1

Per Linux è Xlib ma lo fa lavora per la tastiera come bene? (trovato solo riferimento al mouse)

Sì, funziona anche per tastiera.

+0

ottimo e penso che Xlib sia più generico di gtk (cfr la pagina di xlib su wikipedia) ma come per pygtk, non vedo la funzione per farlo ... –

+0

ok trovato con Xlib: pymouse per il mouse e qui (http://www.tuxisalive.com/tux-droid-forum/tux-gadgets/245877021) per la tastiera –

2

funziona questo totalmente ... su un Mac, almeno. Questo è per un clic e si trascina, ecc .. ma può essere adattato di conseguenza.

#!/usr/bin/python 
import sys 
import time 
from Quartz.CoreGraphics import * # imports all of the top-level symbols in the module 

def mouseEvent(type, posx, posy): 
    theEvent = CGEventCreateMouseEvent(None, type, (posx,posy), kCGMouseButtonLeft) 
    CGEventPost(kCGHIDEventTap, theEvent) 
def mousemove(posx,posy): 
    mouseEvent(kCGEventMouseMoved, posx,posy); 
def mouseclickdn(posx,posy): 
    mouseEvent(kCGEventLeftMouseDown, posx,posy); 
def mouseclickup(posx,posy): 
    mouseEvent(kCGEventLeftMouseUp, posx,posy); 
def mousedrag(posx,posy): 
    mouseEvent(kCGEventLeftMouseDragged, posx,posy); 

ourEvent = CGEventCreate(None); 
currentpos=CGEventGetLocation(ourEvent); # Save current mouse position 
mouseclickdn(60, 100); 
mousedrag(60, 300); 
mouseclickup(60, 300); 
time.sleep(1); 
mousemove(int(currentpos.x),int(currentpos.y)); # Restore mouse position 
0

Una soluzione multipiattaforma su linux, windows e mac è autopile. https://github.com/msanders/autopy/

Esso permette di controllare mouse e tastiera, prendere screenshot, e trovando le piccole immagini bitmap in immagini bitmap più grandi e dovrebbe essere molto conveniente se si desidera automatizzare alcune applicazioni GUI si ha alcun controllo su.

1

posso consigliare PyAutoGUI, permette di pieno controllo del mouse e tastiera e ottenere Screenshots e addirittura è possibile individuare le immagini all'interno dello schermo (come: dove è il pulsante), molto utile per automatizzare i clic in modo dinamico. Funziona con Windows, macOS e Linux.

Ad esempio:

>>> import pyautogui 
>>> screenWidth, screenHeight = pyautogui.size() 
>>> pyautogui.moveTo(screenWidth/2, screenHeight/2) 

Scopri i Introduction page.

Problemi correlati