我想从浏览器中拖动图片但无法获取网址!
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
答案 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"))