PyQt4 tutorial 독서노트(7)--Drag and Drop 드래그
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는 데이터를 얻기 위한 편리한 함수를 제공합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.