QClipboard在GNU / Linux下很有趣

时间:2015-05-24 17:09:18

标签: linux pyqt4

#!/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
  1. 当我设置mode=QClipboard.Clipboard(默认值)时,它不起作用。它将旧数据留在剪贴板和选择剪贴板中。
  2. 当我将其更改为mode=QClipboard.Selection(特定于X的那个)时,它会将选择<+ em>和主剪贴板替换为yo
  3. 问题:为什么&#34;主要的事情&#34; (mode默认为QClipboard.Clipboard毕竟不起作用,而某些应该只能有条件地工作(QClipboard.supportsSelection())的工作呢?我怎样才能正常工作?

1 个答案:

答案 0 :(得分:0)

我实际上无法在我的Linux系统上重现这个问题:它对我来说都很好。

但是,docs表示剪贴板需要X11上的事件循环:

  

X11剪贴板是事件驱动的,即剪贴板不会   如果事件循环未运行,则正常运行。同样,它是   建议存储或检索剪贴板的内容   直接响应用户输入事件,例如鼠标按钮或键   按下并释放。您不应存储或检索剪贴板   响应计时器或非用户输入事件的内容。

因此,您可以通过强制处理排队事件来使您的示例在您的系统上工作:

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

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