Как я могу отключить свободный от буфера обмена на выходе приложения PyQt?

У меня есть простое приложение PyQt4 (см. код ниже), который показывает проблему: если я выбираю текст из a QLineEdit и скопируйте его в буфер обмена, затем я могу вставить его к другому приложению только, в то время как мое приложение работает. Кажется, что на выходе, приложение PyQt очищает буфер обмена, таким образом, я не могу вставить текст после того, как приложение закрывается.

Что я могу сделать для предотвращения этой проблемы?

PyQt 4.4.3 Python 2.5 Windows XP. Также этот эффект, подтвержденный на PyQt 4.5 +, и на Linux также.

import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
edit = QtGui.QLineEdit()
edit.setText('foo bar')
edit.show()
app.exec_()
7
задан ekhumoro 21 March 2019 в 14:32
поделиться

1 ответ

Хорошо, не совсем ясно, что происходит с буфером обмена. Просто QT хранит какой-то указатель на текст в буфере обмена вместо простого текста. Гордон Тайлер указал мне на эту дискуссию в списке рассылки PyQt, которая объясняет, что происходит. Я цитирую код и соответствующую часть объяснения.

Запустите этот код при выходе из приложения (например, в обработчике closeEvent):

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

Основная концепция заключается в том, что по умолчанию копируется что-то. в буфер обмена только копирует ссылку/ указатель на источник. заявка. Затем, когда другое приложение хочет вставить данные. из буфера обмена запрашивает данные у исходного приложения. При вызове OleFlushClipboard Windows копирует реальные данные. в буфер обмена вместо ссылки. В то время как это вызывает задержка при копировании изображений, она не должна оказывать заметного влияния со струнами.

Код выше довольно кроссплатформенный и не оказывает плохого влияния на платформу Linux.

5
ответ дан 7 December 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: