Je veux que mon script Python puisse copier et coller vers / à partir du presse-papiers via X11 (afin qu'il fonctionnera sur Linux). Quelqu'un peut-il me signaler à des ressources spécifiques que je peux regarder, ou les concepts que je devrais maîtriser? P>
est-ce possible avec la bibliothèque Python X à http://python-xlib.sourceforge.net a>? p>
5 Réponses :
Vous trouverez peut-être ce fil utile: Comment le presse-papiers x11 est-il multiple Formats de données? P>
Vous pouvez le faire avec Pygtk . Une solution propre mais pourrait être un peu survenue en fonction de votre application. P>
Une autre méthode qui obtient un autre Google - Hits est de faire un système Appelez-vous à Xsel . P>
Je suis favorable à une solution à base de tkinter sur un qui nécessite Pygtk, simplement en raison du potentiel de ce dernier pour les défis d'installation. Compte tenu de cela, ma recommandation à Alvin Smith est de lire: CUT & COLLER Texte entre les widgets Tkinter
Vous pouvez utiliser ce code dans un gestionnaire d'événements Tkinter (de Python-List via Accès au presse-papiers Tkinter ): P>
data = event.widget.selection_get(selection="CLIPBOARD"))
Le premier lien est cassé.
from Xlib import X, display as Xdisplay
def property2str(display, prop):
if prop.property_type == display.get_atom("STRING"):
return prop.value.decode('ISO-8859-1')
elif prop.property_type == display.get_atom("UTF8_STRING"):
return prop.value.decode('UTF-8')
else:
return "".join(str(c) for c in prop.value)
def get_selection(display, window, bufname, typename):
bufid = display.get_atom(bufname)
typeid = display.get_atom(typename)
propid = display.get_atom('XSEL_DATA')
incrid = display.get_atom('INCR')
window.change_attributes(event_mask = X.PropertyChangeMask)
window.convert_selection(bufid, typeid, propid, X.CurrentTime)
while True:
ev = display.next_event()
if ev.type == X.SelectionNotify and ev.selection == bufid:
break
if ev.property == X.NONE:
return None # request failed, e.g. owner can't convert to target format type
else:
prop = window.get_property(propid, X.AnyPropertyType, 0, 2**31-1, 1)
if prop.property_type == incrid:
result = ""
while True:
while True:
ev = display.next_event()
if ev.type == X.PropertyNotify and ev.atom == propid and ev.state == X.PropertyNewValue:
break
prop = window.get_property(propid, X.AnyPropertyType, 0, 2**31-1, 1)
if len(prop.value) == 0:
break
result += property2str(display, prop)
return result
else:
return property2str(display, prop)
display = Xdisplay.Display()
window = display.screen().root.create_window(0,0, 1,1, 0, X.CopyFromParent)
print( get_selection(display, window, "CLIPBOARD", "UTF8_STRING") or \
get_selection(display, window, "CLIPBOARD", "STRING") )
En premier, installez le Utilisation de ce module multi-plate-forme (Linux, Mac, Windows) est assez simple: p> Clipboard code>
Module à l'aide de pip3 code>: p>
Mais cela ne vous permet pas d'utiliser la sélection code> code>, n'est-ce pas?