PyQt4 tutorial 독서노트(7)--Drag and Drop 드래그

7895 단어
==드래그 앤 드롭은 그래픽 사용자 인터페이스의 일부입니다.드래그 앤 드롭 작업을 통해 사용자는 복잡한 작업을 직관적으로 수행할 수 있습니다==일반적으로 데이터 또는 그래픽 객체 중 하나를 드래그할 수 있습니다. ==만약 우리가 그림을 한 프로그램에서 다른 곳으로 드래그한다면, 우리는 이진 데이터를 드래그할 것이다.Firefox에서 탭을 다른 곳으로 옮기면 그래픽 구성 요소를 드래그합니다.

1. 단순 드래그

import sys
from PyQt4 import QtGui

class Button(QtGui.QPushButton):

    def __init__(self, title, parent):
        super(Button, self).__init__(title, parent)

        self.setAcceptDrops(True)

    def dragEnterEvent(self, e):

        if e.mimeData().hasFormat('text/plain'):
            e.accept()
        else:
            e.ignore() 

    def dropEvent(self, e):
        self.setText(e.mimeData().text()) 


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        edit = QtGui.QLineEdit('', self)
        edit.setDragEnabled(True)
        edit.move(30, 65)

        button = Button("Button", self)
        button.move(190, 65)

        self.setWindowTitle('Simple drag & drop')
        self.setGeometry(300, 300, 300, 150)


def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()  


if __name__ == '__main__':
    main()   

텍스트 상자에 텍스트 선택을 입력하고 단추로 드래그하면 단추의 텍스트가 선택한 텍스트로 바뀝니다.
class Button(QtGui.QPushButton):

    def __init__(self, title, parent):
        super(Button, self).__init__(title, parent)
        self.setAcceptDrops(True)

단추에 텍스트를 드래그하기 위해서, so는 자신의 단추 클래스 (QtGui.QPushButton 계승) 를 만들고 이벤트 함수를 드래그하고 드래그해야 합니다.마지막 문장은drops 이벤트를 받아들일 수 있도록 하는 것입니다.

2. 버튼 컨트롤 드래그

import sys
from PyQt4 import QtCore, QtGui


class Button(QtGui.QPushButton):

    def __init__(self, title, parent):
        super(Button, self).__init__(title, parent)

    def mouseMoveEvent(self, e):

        if e.buttons() != QtCore.Qt.RightButton:
            return

        mimeData = QtCore.QMimeData()

        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(e.pos() - self.rect().topLeft())

        dropAction = drag.start(QtCore.Qt.MoveAction)

    def mousePressEvent(self, e):

        super(Button, self).mousePressEvent(e)

        if e.button() == QtCore.Qt.LeftButton:
            print ('press')


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        self.setAcceptDrops(True)

        self.button = Button('Button', self)
        self.button.move(100, 65)

        self.setWindowTitle('Click or Move')
        self.setGeometry(300, 300, 280, 150)
        self.show()

    def dragEnterEvent(self, e):

        e.accept()

    def dropEvent(self, e):

        position = e.pos()        
        self.button.move(position)

        e.setDropAction(QtCore.Qt.MoveAction)
        e.accept()


def main():

    app = QtGui.QApplication([])
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

코드는 마우스 왼쪽 단추를 누르고press를 출력하며 오른쪽 단추를 누르고 드래그하면 단추를 드래그하는 곳에 놓는다.

확장: QmimeData 클래스


다음으로 이동:http://blog.chinaunix.net/uid-25749806-id-331651.htmlQmimeData 클래스는 데이터에 대한 용기를 제공합니다. MIME 형식 데이터에 대한 정보를 기록하는 데 사용됩니다. QmimeData는 클립보드에 저장된 정보를 설명하거나, 원리를 끌어당기는 데 사용됩니다. QmimeData 대상은 저장된 정보와 정확한 MIME 형식을 연결하여 정보가 안전하게 응용 프로그램 사이로 이동할 수 있도록 합니다.
또는 같은 응용 프로그램 사이에서 QmimeData 대상을 복사하면 QDrag와 QClipboard 대상을 지원합니다. 이로써 QT가 사용하는 메모리를 관리할 수 있습니다.
단일한 QmimeData 대상은 여러 가지 다른 형식으로 같은 데이터를 저장할 수 있고formats () 함수는 사용할 수 있는 데이터를 되돌려줍니다
형식의list, 데이터 () 함수는 MIME 형식과 연결된 데이터 형식을 되돌려줍니다. setData () 는 MIME 형식에 데이터를 설정합니다.
대부분의 MIME 유형에 대해 QmimeData는 데이터를 얻기 위한 편리한 함수를 제공합니다.

좋은 웹페이지 즐겨찾기