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

时间:2009-07-02 10:04:21

标签: python qt pyqt clipboard

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

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

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

为什么不起作用?

谷歌搜索转向this

建议在上面的代码之后添加:

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

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

更新

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

4 个答案:

答案 0 :(得分:10)

您可能需要指定mode

此代码在Windows上为我工作:

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

答案 1 :(得分:4)

我知道你没有使用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.'

答案 2 :(得分:0)

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

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

  

QClipboard QApplication.clipboard()

     

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

     

注意:QApplication对象应该   已经建成之前   访问剪贴板。

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

修改

引用文献中的上述结论不正确。根据实际的PyQt documentation of the QClipboard对象:

  

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

答案 3 :(得分:-1)

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

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