PyQt5-드래그 앤 드롭
제공 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 PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets 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 and drop')
def main():
app = QApplication(sys.argv)
ex = Example()
ex.show()
app.exec_()
if __name__ == '__main__':
main()
위의 코드는 다음 출력을 생성합니다.