我怎么可以禁用明确的剪贴板上出的PyQt应用程序?
题
我有一个简单的PyQt4应用(见下面的代码),揭示了问题:如果我选择案文一 QLineEdit
和复制它的剪贴板,然后我可以贴到另一个应用程序,只有当我的应用程序正在运行。它似乎在退出,PyQt应用程序清除剪贴板所以我不能糊的文字应用程序后被关闭。
我能做些什么来避免这种问题?
PyQt4.4.3@Python2.5@Windows XP。还有这样的效果证实了在PyQt4.5+,并在Linux上。
import sys
from PyQt4 import QtGui
app = QtGui.QApplication(sys.argv)
edit = QtGui.QLineEdit()
edit.setText('foo bar')
edit.show()
app.exec_()
解决方案
OK,那是不完全明确的剪贴板发生。只是夸脱储存某些种类的指针的文本剪贴板,而不只是文字。戈登*泰勒已经指出我 这个讨论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上的平台。
其他提示
我偶然发现了这个问题,当我遇到了GNU / Linux下类似的问题,并发现通过bialix引用网站上的答案(其地址发生了变化,但仍然可以通过网络搜索到达)。举最相关的部分:
请记住,在Linux上,除非你有像klipper程序,当应用程序设置剪贴板退出时,剪贴板清空。
因此,有这一点。它是GNU / Linux的系统上的事情。下面是从 ubuntu的维基更透彻的解释:
为什么会出现这种情况?
在问题发生,因为Xorg的花费复制保守的方法。它复制仅当用户执行选择或拷贝的原始数据的参考。它不会去,直到用户请求膏会从源程序检索实际数据。它节省了大量的这种方式不需要传输数据的,在没有来自没有保存它的剪贴板别处一个封闭的程序中检索数据的方式为代价的。
您可以通过安装一个剪贴板管理等parcellite,klipper程序,glipper或clipman避开它。