PyQt剪贴板无法复制到系统剪贴板

12 投票
4 回答
18620 浏览
提问于 2025-04-15 12:38

下面这段代码似乎对系统剪贴板没有任何影响:

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

根据Qt的文档,这就是复制文本到剪贴板的方法。

可是为什么它不管用呢?

我在网上搜索了一下,找到了这个链接。

它建议在上面的代码后面加上这个:

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

但这个代码的表现很奇怪:它只在程序退出后才会把文本复制到剪贴板。而且,链接中的一些人还说这个在Linux上不管用。

更新:

没事,我之前在别的地方搞错了,我不是把复制的功能绑定到复制按钮上,而是连接到了“退出”按钮。

4 个回答

1

抱歉我的英语不好。我在用Linux系统。我只写了这个命令:

QApplication.clipboard().setText("这是要放到剪贴板上的文本")

5

我知道你不是在用Windows系统,但也许这能给你一些启发……我在一个PyQt程序中用这个方法来把网址复制到剪贴板:

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.'
16

你可能需要指定一下模式

这段代码在我的Windows系统上是可以正常工作的:

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

撰写回答