繁体   English   中英

PyQt 剪贴板不会复制到系统剪贴板

[英]PyQt clipboard doesn't copy to system clipboard

以下代码片段似乎根本不会影响系统剪贴板:

clipboard = QtGui.QApplication.clipboard()
clipboard.setText(text)

根据 Qt 文档,这是将文本复制到剪贴板的方式,

为什么它不起作用?

谷歌搜索发现了这一点

它建议在上述代码之后添加:

event = QtCore.QEvent(QtCore.QEvent.Clipboard)
app.sendEvent(clipboard, event)

但是这个行为很奇怪:它只在程序退出后将文本复制到剪贴板。 另外,该链接中的一些人报告说这不适用于 linux。

更新:

没关系,我在其他地方做错了,我没有将复制槽绑定到复制按钮,而是将它连接到“退出”按钮。

您可能需要指定模式

这段代码在 Windows 上对我有用:

    cb = QtGui.QApplication.clipboard()
    cb.clear(mode=cb.Clipboard )
    cb.setText("Clipboard Text", mode=cb.Clipboard)

我知道你没有使用 Windows,但也许这会给你一些想法......我在 PyQt 程序中使用它来将 URL 复制到剪贴板:

import win32clipboard

s = 'copy this to the clipboard'
try:
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardText(s)
    win32clipboard.CloseClipboard()
except:
    print 'Could not copy clipboard data.'

你可以试试PyGTK 的gtk.Clipboard 我相信它是多平台的。

这可能是您在使用 PyQt 的QClipboard对象时遇到问题的部分原因:

QClipboard QApplication.clipboard()

返回指向应用程序全局剪贴板的指针。

注意:在访问剪贴板之前,应该已经构建了 QApplication 对象。

它指向 应用程序剪贴板,而不是系统剪贴板。 您可能必须使用 QClipboard 对象以外的其他东西来实现您的目的。

编辑:

上述引用文档的结论是不正确的。 根据QClipboard对象的实际PyQt 文档

QClipboard 类提供对窗口系统剪贴板的访问。

对不起我的英语不好。 我用的是linux。 我只写了这个命令

QApplication.clipboard().setText("这是文本 2 剪贴板")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM