QClipboard 在 GNU/Linux 下的工作很有趣
Posted
技术标签:
【中文标题】QClipboard 在 GNU/Linux 下的工作很有趣【英文标题】:QClipboard works funny under GNU/Linux 【发布时间】:2015-05-24 17:09:17 【问题描述】:#!/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()
)能起作用?我怎样才能使它正常工作?
【问题讨论】:
【参考方案1】:我实际上无法在我的 Linux 系统上重现该问题:对我来说一切正常。
但是,docs 说剪贴板需要 X11 上的事件循环:
X11 剪贴板是事件驱动的,即剪贴板不会 如果事件循环未运行,则正常运行。同样,它是 建议存储或检索剪贴板的内容 直接响应用户输入事件,例如鼠标按钮或键 新闻和发布。您不应存储或检索剪贴板 响应计时器或非用户输入事件的内容。
因此,您可以通过强制处理这样的排队事件来让您的示例在您的系统上运行:
app.clipboard().setText('yo')
app.processEvents()
input()
不过,显然这是一个人为的“解决方案”,正确的做法是启动事件循环并遵循文档中的建议。
【讨论】:
以上是关于QClipboard 在 GNU/Linux 下的工作很有趣的主要内容,如果未能解决你的问题,请参考以下文章
如果由同一应用程序触发,则丢弃 QClipboard::dataChanged() 信号
如何使用 qclipboard 为 nautilus 复制或剪切文件
Python Qt GUI设计:QClipboard剪贴数据类(基础篇—19)