2009-11-16 8 views
2

Par exemple, j'ouvre un fichier pdf ou une page web en gnome, double-cliquez avec la souris sur un texte, donc un mot est sélectionné, comment puis-je obtenir ce mot dans un démon en cours d'exécution écrit avec python-dbus?Comment obtenir le texte sélectionné dans une application de bureau à l'aide de python-dbus?

Un morceau de script simple mais fonctionnel est grandement apprécié.

Merci!

+0

, autant que je sache ce comportement dépend de l'application: si l'application X N'exporte pas le texte, vous n'avez pas de chance. Utilisez D-pieds ou similaires pour introspecter les méthodes d'une application. – jldupont

Répondre

7

Vous n'avez pas besoin D-Bus, écouter simplement les changements de milieu-clic (sélection) avec le presse-papiers, par exemple Gtk:

import gtk 

def _clipboard_changed(clipboard, event): 
    text = clipboard.wait_for_text() 

clip = gtk.clipboard_get(gtk.gdk.SELECTION_PRIMARY) 
clip.connect("owner-change", _clipboard_changed) 
+0

WOW, génial! Fonctionne très bien! Juste besoin d'une ligne supplémentaire: gtk.main() pour laisser le programme continuer à fonctionner. Je veux mettre en œuvre quelque chose comme le logiciel de traduction habituel. Je suppose que je peux ouvrir une nouvelle fenêtre et la placer autour de la souris. Et seulement si je peux insérer l'annotation dynamique aux fichiers pdf en cours de lecture, parfait. – jaimechen

+0

J'ai rencontré des problèmes avec gtk.gdk.SELECTION_PRIMARY. Il contenait uniquement des clips qui avaient été copiés manuellement à l'aide de la souris. Je remplis parfois le presse-papiers en utilisant 'xclip' dans un terminal bash, donc le paramètre de sélection qui me convient (pour les mises à jour de contenu de presse-papiers avec souris et script) était' gtk.gdk.SELECTION_CLIPBOARD'. J'ai également ajouté une condition pour vérifier 'NoneType' avant de passer le contenu, sinon vous obtiendrez la chaîne" None "dans votre variable nommée' text' ci-dessus. – hobs

0

Gnome Do a quelques plug-ins qui utilisent le texte sélectionné. Je ne suis pas sûr comment il est implémenté (et s'il utilise DBus), mais le code devrait tout révéler. :)

Questions connexes