¿Cómo puedo desactivar clara del portapapeles en la salida de la aplicación de PyQt?

StackOverflow https://stackoverflow.com/questions/2007103

  •  18-09-2019
  •  | 
  •  

Pregunta

Tengo una aplicación PyQt4 sencilla (ver el código de abajo) que revela un problema: si selecciono el texto de un QLineEdit y copiar al portapapeles, entonces puedo pegarlo en otra aplicación única, mientras que mi aplicación se está ejecutando. Parece que en la salida, la aplicación de PyQt despeja el portapapeles, así que no puedo pega el siguiente texto después de la aplicación se cierra.

¿Qué puedo hacer para evitar este problema?

4.4.3 PyQt @ @ Python 2.5 Windows XP. También confirmó este efecto en PyQt 4.5+, y en Linux también.

import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
edit = QtGui.QLineEdit()
edit.setText('foo bar')
edit.show()
app.exec_()
¿Fue útil?

Solución

OK, no es del todo claro del portapapeles se produce. Tienda sólo QT algún tipo de puntero de texto en el portapapeles en vez de texto. Gordon Tyler me ha señalado esta discusión sobre la lista de distribución, que PyQt explica lo que está pasando. Cito de código y la parte pertinente de la explicación.

Ejecutar este código en la salida de aplicación (por ejemplo, en manejador CloseEvent):

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

El concepto básico detrás de esto es que por defecto copia algo   en el portapapeles sólo copia una referencia / puntero a la fuente   solicitud. Luego, cuando otra aplicación quiere pegar los datos   desde el portapapeles que solicita los datos de la aplicación de origen.   Llamando OleFlushClipboard causas de Windows para copiar los datos reales   en el portapapeles en lugar de la referencia. Si bien esto provoca una   retraso al copiar imágenes, no debería tener ningún impacto notable   con cuerdas.

El código anterior es bastante multiplataforma y no tiene ningún impacto negativo en la plataforma Linux.

Otros consejos

Me topé con esta pregunta cuando me encontré con problema similar en GNU / Linux y encontré la respuesta en el sitio referenciado por bialix (cuya dirección ha cambiado, pero aún es posible alcanzar a través de búsqueda en la Web). Para citar la parte más relevante:

  

Recuerde que en Linux, a menos que tenga algo así como Klipper, cuando la configuración de las salidas del portapapeles aplicación, se vacía el portapapeles.

Así que hay que. Es una cosa sistema para GNU / Linux. He aquí una explicación más completa de ubuntu wiki :

  

¿Por qué sucede esto?

     

El problema se debe a que Xorg tiene un enfoque conservador para la copia. Se copia sólo una referencia a los datos originales cuando el usuario realiza una selección o copia. No se va y recuperar los datos reales del programa de origen hasta que el usuario solicita una pasta. Se ahorra una gran cantidad de transferencia de datos que no sean necesarios de esta manera, a expensas de no tener ninguna manera de recuperar los datos de un programa cerrado que no ha guardado su portapapeles en otro lugar.

Puede conseguir alrededor de él mediante la instalación de un gestor de portapapeles como Parcellite, Klipper, Glipper o clipman.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top