On 09/09/10 01:17, David Boddie wrote:
On Wed Sep 8 22:33:17 BST 2010, Hugo Leveille wrote:

I have looked at the doc but all I could find was drag and drop within the
pyqt app itself. What id like to do is the, for exemple, attach an url or
whatever needed to an item so that if I drag the item into my desktop, in a
explorer window or whatever othe app that support drag drop, it will
recongnize it

Some if anyone is nice enought to give me a quick exemple or to point me at
the specific exemple where it is shown, it would be very nice

It's been a while since I looked at this sort of thing, and the example I
hoped would help me remember doesn't actually do anything with URLs...

You need to set the URL of the MIME data you create when you start a drag
operation:

http://www.riverbankcomputing.com/static/Docs/PyQt4/html/qmimedata.html#setUrls

I seem to remember that you have to supply URLs for certain things to work
on certain systems, and this may mean that you have to save data to a
temporary file, then set the URL of that file, when filling in the MIME data.

Here is one way to do it that doesn't use a temporary file:

   http://www.diotavelli.net/PyQtWiki/Exporting_a_file_to_other_applications

The Drop Site example in Qt is useful for looking at the MIME types of data
dragged from other applications. It would be useful if someone ported that
to PyQt.

as i pointed out in an earlier post, the draggabletext example in the pyqt sources can easily be adapted to work with urls: just change mimeData.setText to mimeData.setUrls and it will just work :)

anyway, here's a simplified version of the wiki example that doesn't write any additional files:

import sys, os
from PyQt4.QtCore import Qt, QMimeData, QUrl
from PyQt4.QtGui import QApplication, QLabel, QDrag


class Window(QLabel):
    def __init__(self):
        QLabel.__init__(self)
        self.setWindowTitle('Drag File Url')
        self.setText(os.path.join(os.getcwd(), __file__))
        self.setMargin(20)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            data = QMimeData()
            data.setUrls([QUrl.fromLocalFile(self.text())])
            drag = QDrag(self)
            drag.setMimeData(data)
            drag.exec_()


if __name__ == "__main__":

    app = QApplication(sys.argv)
    window = Window()
    window.show()

    sys.exit(app.exec_())

_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to