PyQt-드래그 앤 드롭

제공 drag and drop사용자에게 매우 직관적입니다. 사용자가 한 창에서 다른 창으로 개체를 복사하거나 이동할 수있는 많은 데스크톱 응용 프로그램에서 발견됩니다.

MIME 기반 드래그 앤 드롭 데이터 전송은 QDrag 클래스를 기반으로합니다. QMimeData개체는 데이터를 해당 MIME 유형과 연결합니다. 클립 보드에 저장되어 끌어서 놓기 과정에서 사용됩니다.

다음 QMimeData 클래스 함수를 사용하면 MIME 유형을 감지하고 편리하게 사용할 수 있습니다.

시험 장치 얻는 사람 세터 MIME 유형
hasText () 본문() setText () 텍스트 / 일반
hasHtml () html () setHtml () 텍스트 / html
hasUrls () URL () setUrls () 텍스트 / uri-list
hasImage () imageData () setImageData () 이미지 / *
hasColor () colorData () setColorData () 응용 프로그램 / x- 색상

많은 QWidget 개체는 끌어서 놓기 활동을 지원합니다. 데이터를 드래그 할 수 있도록 허용하는 경우 true로 설정해야하는 setDragEnabled ()가 있습니다. 반면에 위젯은 드래그 앤 드롭 이벤트에 응답하여 드래그 된 데이터를 저장해야합니다.

  • DragEnterEvent 드래그 액션이 들어올 때 대상 위젯으로 전송되는 이벤트를 제공합니다.

  • DragMoveEvent 드래그 앤 드롭 작업이 진행 중일 때 사용됩니다.

  • DragLeaveEvent 드래그 앤 드롭 동작이 위젯을 떠날 때 생성됩니다.

  • DropEvent반면에 드롭이 완료되면 발생합니다. 이벤트의 제안 된 작업은 조건부로 수락 또는 거부 될 수 있습니다.

다음 코드에서 DragEnterEvent는 이벤트의 MIME 데이터에 텍스트가 포함되어 있는지 확인합니다. 그렇다면 이벤트의 제안 된 작업이 수락되고 텍스트가 ComboBox에 새 항목으로 추가됩니다.

import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class combo(QComboBox):

   def __init__(self, title, parent):
      super(combo, self).__init__( parent)
	
      self.setAcceptDrops(True)
		
   def dragEnterEvent(self, e):
      print e
		
      if e.mimeData().hasText():
         e.accept()
      else:
         e.ignore()
			
   def dropEvent(self, e):
      self.addItem(e.mimeData().text())
		
class Example(QWidget):

   def __init__(self):
      super(Example, self).__init__()
		
      self.initUI()
		
   def initUI(self):
      lo = QFormLayout()
      lo.addRow(QLabel("Type some text in textbox and drag it into combo box"))
		
      edit = QLineEdit()
      edit.setDragEnabled(True)
      com = combo("Button", self)
      lo.addRow(edit,com)
      self.setLayout(lo)
      self.setWindowTitle('Simple drag & drop')
		
def main():
   app = QApplication(sys.argv)
   ex = Example()
   ex.show()
   app.exec_()
	
if __name__ == '__main__':
   main()

위의 코드는 다음 출력을 생성합니다.