如何将图像从Chrome拖到PyQt?

时间:2014-09-11 09:29:17

标签: image qt google-chrome drag-and-drop pyqt

我想从浏览器中拖动图片但无法获取网址!

if ev.mimeData().hasUrls():
    ev.mimeData().urls()

此代码适用于Firefox中的图像(但我有时会获得图像的链接而不是图像的源URL - 我已经知道如何修复它。)

但是,当我从Chrome中拖动图片时,相同的代码会返回一个空列表。

那么,问题是什么?


我尝试将图片拖放到默认QlineEdit窗口小部件,并且自动删除了src网址FireFox和Chrome!

----

实验结果:

PyQt4 - Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 (Ubuntu 14.04)

Firefox 32.0                          : Only work with URL, I can't found image type.
Google chrome Version 37.0.2062.120 (64-bit) : URL is empty and no images founded.

PyQt5 Python 3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2] on linux2 (Ubuntu14.04)
the same

2 个答案:

答案 0 :(得分:0)

所有数据拖累&放入QWidget(在PyQt中)它必须是常见的MIME类型(QtCore.QMimeData)。它的可能性数据不是您的问题中的URL(text/uri-list),它可能只是MIME看图像(image/ *)类型,而不是URL(但有时它会看到URL和图像)。但是,您可以直接从QtCore.QMimeData获取图像数据;

您可以尝试使用方法bool QMimeData.hasImage (self)来检查类型是否为图片。并通过调用QVariant QMimeData.imageData (self)将图片放到QImage,请参阅示例如何实现;

import sys
from PyQt4 import QtGui

class QCustomQWidget (QtGui.QWidget):
    def __init__ (self, parentQWidget = None):
        super(QCustomQWidget, self).__init__(parentQWidget)
        self.mimeQLabel = QtGui.QLabel()
        allQHBoxLayout = QtGui.QHBoxLayout()
        allQHBoxLayout.addWidget(self.mimeQLabel)
        self.setLayout(allQHBoxLayout)
        self.setAcceptDrops(True)

    def dragEnterEvent (self, eventQDragEnterEvent):
        eventQDragEnterEvent.acceptProposedAction()

    def dropEvent (self, eventQDropEvent):
        self.mimeQLabel.clear()
        if eventQDropEvent.mimeData().hasImage():
            mimeQImage = QtGui.QImage(eventQDropEvent.mimeData().imageData())
            self.mimeQLabel.setPixmap(QtGui.QPixmap.fromImage(mimeQImage))
        elif eventQDropEvent.mimeData().hasUrls():
            self.mimeQLabel.setText('\n'.join([str(url) for url in eventQDropEvent.mimeData().urls()]))
        QtGui.QWidget.dropEvent(self, eventQDropEvent)

app = QtGui.QApplication(sys.argv)
myQCustomQWidget = QCustomQWidget()
myQCustomQWidget.show()
sys.exit(app.exec_())

实验结果:

PyQt4 - Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32

Firefox 31.0                          : Image & URL work fine.
Google chrome Version 37.0.2062.103 m : Only work with URL, I can't found image type.

答案 1 :(得分:0)

当您从中拖动某些内容时,Chrome和Firefox会使用不同的其他mime格式。 您可以使用

检查所有mime格式
print(ev.mimeData().formats)

您可以使用此代码段从Chrome中拖动图片。

if ev.mimeData().hasFormat("application/octet-stream"):
    image = QImage()
    image.loadFromData(ev.mimeData().data("application/octet-stream"))