views:

542

answers:

2

The following snippet of code doesn't seem to affect the system clipboard at all:

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

According to the Qt documentation, this is how you copy text to clipboard,

Why isn't it working?

Googling turned this up.

It suggests adding this after the above code:

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

But this one behaves odd: it only copies the text to the clipboard after the program exits. Plus, some people in that link reported that this doesn't work with linux.

UPDATE:

Nevermind, I was doing something wrong else where, instead of binding the copy slot to the copy button, I connected it to the "quit" button.

+3  A: 

I know you are not using Windows, but maybe this will give you some ideas... I used this in a PyQt program to copy URLs to the clipboard:

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.'
jcoon
I'm on windows actually (mainly, though I do have a linuxmint installation)
hasen j
+2  A: 

You might try gtk.Clipboard from PyGTK. I believe it is multi-platform.

This might be part of the reason you're having trouble with PyQt's QClipboard object:

QClipboard QApplication.clipboard ()

Returns a pointer to the application global clipboard.

Note: The QApplication object should already be constructed before accessing the clipboard.

It's pointing to the application clipboard, not the system clipboard. You'll probably have to use something other than the QClipboard object to achieve your end.

tgray