Come è possibile disattivare chiara di appunti su uscita di applicazione PyQt?
Domanda
Ho una semplice applicazione PyQt4 (vedere il codice di seguito) che rivela un problema: se seleziono il testo da un QLineEdit
e copiarlo negli appunti, allora posso incollarlo in un'altra applicazione solo quando la mia applicazione è in esecuzione. Sembra che in uscita, l'applicazione PyQt cancella il clipboard, quindi non posso incollare il testo dopo l'applicazione viene chiusa.
Cosa posso fare per evitare questo problema?
PyQt 4.4.3 @ Python 2.5 @ Windows XP. Anche questo effetto ha confermato il PyQt 4.5+, e anche su Linux.
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
edit = QtGui.QLineEdit()
edit.setText('foo bar')
edit.show()
app.exec_()
Soluzione
OK, non è esattamente chiaro di verifica appunti. Proprio negozio QT una sorta di puntatore di testo nella clipboard anziché solo testo. Gordon Tyler mi ha indicato questa discussione sulla mailing list PyQt che spiega cosa sta succedendo. Cito codice e parte rilevante di spiegazione.
Eseguire questo codice in uscita di applicazione (ad esempio nel gestore CloseEvent):
from PyQt4 import QtGui, QtCore
clipboard = QtGui.QApplication.clipboard()
event = QtCore.QEvent(QtCore.QEvent.Clipboard)
QtGui.QApplication.sendEvent(clipboard, event)
Il concetto alla base di questo è che la copia di default qualcosa negli appunti copia solo un riferimento / puntatore alla fonte applicazione. Poi, quando un'altra applicazione vuole incollare i dati dagli appunti che richiede i dati dall'applicazione di origine. Chiamando OleFlushClipboard causa che Windows per copiare i dati reali negli appunti invece del riferimento. Anche se questo dovesse causare un Ritardo di copia delle immagini, non dovrebbe avere alcun impatto notevole con le stringhe.
Il codice di cui sopra è abbastanza cross-platform e non ha alcun impatto negativo sul piattaforma Linux.
Altri suggerimenti
mi sono imbattuto su questa domanda, quando mi sono imbattuto in problema simile sotto GNU / Linux e trovato la risposta sul sito a cui fa riferimento bialix (il cui indirizzo è cambiato, ma può ancora essere raggiunto tramite ricerca sul web). Per citare la parte più rilevante:
Ricordate che in Linux, a meno che non si dispone di qualcosa come Klipper, quando l'impostazione le uscite degli appunti app, gli appunti si svuota.
Quindi c'è questo. E 'una cosa di sistema per GNU / Linux. Ecco una spiegazione più approfondita da wiki di Ubuntu :
Perché accade questo?
Il problema si verifica perché Xorg ha un approccio conservativo alla copia. Copia solo un riferimento ai dati originali quando l'utente esegue una selezione o copia. Non va e recuperare i dati effettivi dal programma di origine fino a quando l'utente richiede una pasta. Si risparmia un sacco di trasferimento dei dati non necessari in questo modo, a scapito di non avere modo di recuperare i dati da un programma chiuso che non ha risparmiato il suo Appunti da qualche altra parte.
È possibile aggirare l'ostacolo installando un gestore di appunti, come parcellite, Klipper, Glipper o clipman.