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_()
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top