gpt4 book ai didi

python - 如何在 PyQt 应用程序退出时禁用清除剪贴板?

转载 作者:太空狗 更新时间:2023-10-29 21:44:46 28 4
gpt4 key购买 nike

我有一个简单的 PyQt4 应用程序(参见下面的代码),它揭示了一个问题:如果我从 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_()

最佳答案

OK,没有完全清除剪贴板的情况发生。只是 QT 在剪贴板中存储某种文本指针,而不仅仅是文本。戈登·泰勒 (Gordon Tyler) 向我指出了 this discussion on the PyQt mailing list这解释了发生了什么。我引用代码和解释的相关部分。

在应用程序退出时运行此代码(例如在 closeEvent 处理程序中):

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

The basic concept behind this is that by default copying something into the clipboard only copies a reference/pointer to the source application. Then when another application wants to paste the data from the clipboard it requests the data from the source application. Calling OleFlushClipboard causes Windows to copy the real data into the clipboard instead of the reference. While this does cause a delay when copying images, it should not have any noticeable impact with strings.

上面的代码非常跨平台,不会对 Linux 平台造成任何不良影响。

关于python - 如何在 PyQt 应用程序退出时禁用清除剪贴板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2007103/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com