#!/usr/bin/python
from PyQt4.QtGui import QApplication, QClipboard
import sys

app = QApplication(sys.argv)
QApplication.clipboard().setText('yo', mode=QClipboard.Clipboard)
input() #wait for input

当我设置mode=QClipboard.Clipboard(默认值)时,它不起作用。它将旧数据保留在剪贴板和选择剪贴板中。
当我将其更改为mode=QClipboard.Selection(x的特定值)时,它将选择和主剪贴板都替换为yo
问题:为什么“主要的事情”(mode最终默认为QClipboard.Clipboard)不起作用,而应该只在条件下起作用的事情(QClipboard.supportsSelection())起作用?我怎样才能使它正常工作?

最佳答案

我不能在我的linux系统上重现这个问题:它对我来说一切正常。
但是,docs表示剪贴板在x11上需要一个事件循环:
X11剪贴板是事件驱动的,即剪贴板不会
如果事件循环未运行,则正常运行。同样,它是
建议存储或检索剪贴板的内容
直接响应用户输入事件,如鼠标按钮或键
出版发行。不应存储或检索剪贴板
响应计时器或非用户输入事件的内容。
因此,通过强制处理排队事件,您可以让示例在系统上工作,如下所示:

app.clipboard().setText('yo')
app.processEvents()
input()

不过,显然这是一个人为的“解决方案”,正确的做法是启动事件循环并遵循文档中的建议。

10-01 13:57