Python 如何在PyQt应用程序退出时禁用清除剪贴板?
我有一个简单的PyQt4应用程序(见下面的代码),它揭示了一个问题:如果我从Python 如何在PyQt应用程序退出时禁用清除剪贴板?,python,qt,pyqt,clipboard,Python,Qt,Pyqt,Clipboard,我有一个简单的PyQt4应用程序(见下面的代码),它揭示了一个问题:如果我从QLineEdit中选择文本并将其复制到剪贴板,那么我只能在应用程序运行时将其粘贴到另一个应用程序。似乎在退出时,PyQt应用程序会清除剪贴板,因此在应用程序关闭后无法粘贴文本 我能做些什么来避免这个问题 PyQt 4.4.3@python2.5@windowsxp。在PyQt 4.5+和Linux上也证实了这种效果 import sys from PyQt4 import QtGui app = QtGui.QAppl
QLineEdit
中选择文本并将其复制到剪贴板,那么我只能在应用程序运行时将其粘贴到另一个应用程序。似乎在退出时,PyQt应用程序会清除剪贴板,因此在应用程序关闭后无法粘贴文本
我能做些什么来避免这个问题
PyQt 4.4.3@python2.5@windowsxp。在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_()
好的,没有完全清除剪贴板。只需在剪贴板中存储某种文本指针,而不仅仅是文本。戈登·泰勒向我指出了发生的一切。我引用代码和相关部分的解释 在应用程序退出时运行此代码(例如,在closeEvent处理程序中): 这背后的基本概念是默认情况下复制某些内容 在剪贴板中只复制指向源的引用/指针 应用然后当另一个应用程序想要粘贴数据时 它从剪贴板请求源应用程序的数据。 调用会导致Windows复制真实数据 进入剪贴板而不是引用。而这确实会导致 复制图像时延迟,不应产生任何明显影响 用绳子
上面的代码非常跨平台,不会对Linux平台造成任何不良影响。当我在GNU/Linux下遇到类似问题时,偶然发现了这个问题,并在bialix引用的网站上找到了答案(其地址已更改,但仍然可以通过web搜索找到)。引用最相关的部分: 请记住,在Linux中,除非您有类似klipper的东西,否则当设置剪贴板的应用程序退出时,剪贴板将清空 就是这样。它是GNU/Linux的系统。下面是一个更全面的解释: 为什么会发生这种情况 问题的出现是因为Xorg采用了保守的复制方法。当用户执行选择或复制时,它仅复制对原始数据的引用。在用户请求粘贴之前,它不会从源程序中检索实际数据。这样可以节省大量不必要的数据传输,代价是无法从一个关闭的程序中检索数据,而该程序没有将剪贴板保存到其他地方
您可以通过安装剪贴板管理器(如parcellite、klipper、glipper或clipman)来解决此问题。主选项和辅助选项在X上退出时选择的程序之后将无法继续存在。如果没有可用的剪贴板管理器,则此操作在其他平台上不起作用。
from PyQt4 import QtGui, QtCore
clipboard = QtGui.QApplication.clipboard()
event = QtCore.QEvent(QtCore.QEvent.Clipboard)
QtGui.QApplication.sendEvent(clipboard, event)