11

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

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

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

为什么它不起作用?

谷歌搜索发现了这一点

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

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

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

更新:

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

4

4 回答 4

13

您可能需要指定模式

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

    cb = QtGui.QApplication.clipboard()
    cb.clear(mode=cb.Clipboard )
    cb.setText("Clipboard Text", mode=cb.Clipboard)
于 2014-04-16T20:43:15.287 回答
5

我知道你没有使用 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.'
于 2009-07-02T11:16:23.063 回答
1

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

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

于 2021-02-02T14:19:11.737 回答
0

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

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

QClipboard QApplication.clipboard ()

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

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

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

编辑:

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

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

于 2009-07-02T11:30:43.377 回答