Frage

Ich habe eine einfache PyQt4 Anwendung (siehe Code unten), die ein Problem zeigt: wenn ich den Text von einem QLineEdit und kopieren Sie sie in die Zwischenablage wählen, dann kann ich es in eine andere Anwendung einfügen nur während meine Anwendung läuft. Es scheint, dass bei der Ausfahrt, PyQt Anwendung über die Zwischenablage löscht, damit ich nicht den Text einfügen kann, nachdem die Anwendung geschlossen wird.

Was kann ich tun, um dieses Problem zu vermeiden?

PyQt 4.4.3 @ Python 2.5 @ Windows XP. Auch dieser Effekt bestätigt auf PyQt 4.5+, und auf Linux zu.

import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
edit = QtGui.QLineEdit()
edit.setText('foo bar')
edit.show()
app.exec_()
War es hilfreich?

Lösung

OK, es ist nicht ganz klar die Zwischenablage auftritt. Nur QT Speicher eine Art Zeiger von Text in der Zwischenablage, anstatt nur Text. Gordon Tyler hat mich deutete auf dieser Diskussion über die PyQt Mailing-Liste die erklärt, was los ist. Ich zitiere Code und relevanten Teil der Erklärung.

Führen Sie diesen Code beim Beenden der Anwendung (zum Beispiel in closeevent Handler):

   from PyQt4 import QtGui, QtCore
   clipboard = QtGui.QApplication.clipboard()
   event = QtCore.QEvent(QtCore.QEvent.Clipboard)
   QtGui.QApplication.sendEvent(clipboard, event)
  

Das grundlegende Konzept dahinter ist, dass standardmäßig das Kopieren etwas   in die Zwischenablage kopiert nur ein Verweis / Zeiger auf die Quelle   Anwendung. Dann, wenn eine andere Anwendung versucht, die Daten einfügen   aus der Zwischenablage fordert er die Daten aus der Quellanwendung.   Aufruf OleFlushClipboard verursacht Windows die realen Daten kopieren   in die Zwischenablage anstelle der Referenz. Während dies verursacht ein   Verzögerung, wenn Bilder zu kopieren, sollte es keine spürbaren Auswirkungen haben   mit Streichern.

Der obige Code ist ziemlich Cross-Plattform und macht keinen schlechten Einfluss auf dem Linux-Plattform.

Andere Tipps

ich auf dieser Frage gestolpert, als ich in ähnliches Problem lief unter GNU / Linux und fand die Antwort auf der Website von bialix verwiesen (deren Adresse geändert hat, aber immer noch über Web-Suche erreicht werden kann). Um den relevanten Teil zu zitieren:

  

Beachten Sie, dass in Linux, wenn Sie so etwas wie Klipper haben, wenn die App die Zwischenablage Ausfahrten Einstellung, die Zwischenablage geleert wird.

Es gibt also, dass. Es ist ein System, was für GNU / Linux. Hier ist eine gründlichere Erklärung von ubuntu Wiki :

  

Warum geschieht das?

     

Das Problem tritt auf, weil Xorg einen konservativen Ansatz, um das Kopieren stattfindet. Es kopiert nur ein Verweis auf die Originaldaten, wenn der Benutzer eine Auswahl oder Kopie durchführt. Es ist nicht die aktuellen Daten aus dem Quellprogramm gehen und abrufen, bis der Benutzer eine Paste anfordert. Es spart viele unnötige Übertragung von Daten auf diese Weise, auf Kosten die keine Möglichkeit, die Daten aus einem geschlossenen Programm abgerufen werden, um seine Zwischenablage woanders nicht gespeichert hat.

Sie können es umgehen, indem eine Zwischenablage-Manager wie parcel, Klipper, glipper oder clipman installieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top