2014-09-11 7 views
0

브라우저에서 사진을 드래그하려고하지만 URL을 가져올 수 없습니다!이미지를 Chrome에서 PyQt로 드래그하는 방법은 무엇입니까?

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

이 코드는 파이어 폭스에서 이미지와 잘 작동 (하지만 때로는 이미지가 아닌 이미지의 원본 URL의 링크를 얻을 - 나는 이미 그것을 해결하는 방법에 대한 아이디어를 가지고).

그러나 Chrome에서 이미지를 드래그하면 동일한 코드가 빈 목록을 반환합니다.

그래서 문제가 무엇입니까?


나는 QlineEdit 위젯을 기본 이미지 들고 뛰기 시도하고 SRC URL이를 automaticly 파이어 폭스와 크롬 모두 떨어졌다!

----

실험 결과 :

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

그것의 Qt –

+0

@ratchetfreak에서와 I가 시도 당겨 클래스를 갖는'이미지/* '마임을 갖는 이미지 자체이지만 동일한 이동할 수있다. 내 질문에 도움이 될만한 정보를 추가했습니다. – PaleNeutron

답변

0

모든 데이터는 (PyQt는에) QWidget에서 & 드래그 앤 드롭은 일반적인 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. 
+0

코드는 잘 동작하지만'python3.4.0'과'PyQt5'에 이식 할 때 실패합니다. 어떠한 제안? – PaleNeutron

+0

그리고 내 질문에 몇 가지 정보를 추가했습니다. – PaleNeutron

+0

귀하의 환경에서 python27 & pyqt4로 잘 작동한다고하지만 python34 pyqt5에서는 실패합니까? 매우 이상합니다. 그것은 가능성이 구글 크롬 이미지의 다른 MIME을 사용 무엇입니까? 너의 환경에 대해 나에게 줄 수 있니? 감사. –

0

당신이 그들로부터 무언가를 드래그 할 때 크롬과 파이어 폭스가 다른 추가 마임 형식을 사용합니다. 당신은

print(ev.mimeData().formats) 

모든 마임 형식을 검사 할 수 있습니다 당신은이 조각과 크롬에서 이미지를 드래그 할 수 있습니다.

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