PyQt 5 매일 배 워 야 할 드래그 앤 드 롭 이벤트
6873 단어 PyQt5드래그 앤 드 롭 이벤트
컴퓨터 그래 픽 사용자 인터페이스 에서 드래그 이 벤트 는 가상 대상 을 클릭 하고 다른 위치 나 다른 가상 물체 로 드래그 하 는 동작 입 니 다.일반적인 상황 에서 이것 은 여러 동작 을 호출 하거나 두 추상 적 인 대상 간 의 관련 유형 을 만 드 는 데 사 용 될 수 있다.
드래그 앤 드 롭 이 벤트 는 그래 픽 사용자 인터페이스의 일부분 입 니 다.드래그 앤 드 롭 작업 은 사용자 로 하여 금 복잡 한 일 들 을 직관 적 으로 조작 할 수 있 게 한다.
일반적인 상황 에서 우 리 는 두 가지 유형 을 끌 어 다 놓 을 수 있다.데이터 나 일부 도형 대상 이다.만약 우리 가 한 프로그램 에서 그림 을 다른 프로그램 으로 드래그 한다 면,우 리 는 바 이 너 리 데 이 터 를 드래그 합 니 다.Firefox 탭 을 끌 어 다 놓 고 다른 곳 으로 이동 하면 그림 구성 요 소 를 끌 어 다 놓 습 니 다.
단순 드래그 이벤트
이 예 에서 우 리 는 QLine Edit 컨트롤 과 QPushButton 컨트롤 이 있 습 니 다.우 리 는 한 줄 의 텍스트 편집 컨트롤 에서 입력 한 텍스트 를 선택 한 후 단추 컨트롤 에 끌 어 다 놓 은 후 마 우 스 를 풀 면 단추 의 탭 이 달라 집 니 다.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
PyQt5
。
:
:http://blog.csdn.net/weiaitaowang
:2016 8 5
"""
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton
class Button(QPushButton):
def __init__(self, title, parent):
super().__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(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
edit = QLineEdit('', self)
edit.setDragEnabled(True)
edit.move(30, 65)
button = Button(' ', self)
button.move(190, 65)
self.setGeometry(300, 300, 300, 150)
self.setWindowTitle(' ')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
이 예 는 간단 한 드래그 앤 드 롭 동작 을 소개 했다.
class Button(QPushButton):
def __init__(self, title, parent):
super().__init__(title, parent)
self.setAcceptDrops(True)
QPushButton 컨트롤 에 설 치 된 텍스트 를 표시 하기 위해 서 는 QPushButton 컨트롤 의 일부 방법 을 다시 써 야 합 니 다.따라서 우 리 는 우리 만 의 버튼 류 를 만들어 QPushButton 류 에서 물 려 받 을 것 이다.
self.setAcceptDrops(True)
컨트롤 에 드래그 앤 드 롭 이 벤트 를 사용 합 니 다.
def dragEnterEvent(self, e):
if e.mimeData().hasFormat('text/plain'):
e.accept()
else:
e.ignore()
우선 dragEnterEvent()방법 을 다시 썼 습 니 다.받 아들 일 데이터 형식(text/plain)을 알려 줍 니 다.일반적인 상황 에서 그것 은 순수한 텍스트 이다.
def dropEvent(self, e):
self.setText(e.mimeData().text())
다음은 dropEvent()방법 을 다시 썼 습 니 다.drop 이벤트 가 할 일 을 정의 합 니 다.여기에서 우 리 는 단추 컨트롤 의 텍스트 를 바 꿉 니 다.
edit = QLineEdit('', self)
edit.setDragEnabled(True)
QLine Edit 컨트롤 의 드래그 동작 을 사용 하려 면 setDragEnabled()방법 을 사용 하여 활성화 해 야 합 니 다.프로그램 실행 후
드래그 앤 드 롭 버튼 컨트롤
다음 예 에서 단추 컨트롤 을 끌 어 다 놓 는 방법 을 보 여 줍 니 다.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
PyQt5
, , 。
:
:http://blog.csdn.net/weiaitaowang
:2016 8 5
"""
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtCore import Qt, QMimeData
from PyQt5.QtGui import QDrag
class Button(QPushButton):
def __init__(self, title, parent):
super().__init__(title, parent)
def mouseMoveEvent(self, e):
if e.buttons() != Qt.RightButton:
return
mimeData = QMimeData()
drag = QDrag(self)
drag.setMimeData(mimeData)
drag.setHotSpot(e.pos() - self.rect().topLeft())
drag.exec_(Qt.MoveAction)
def mousePressEvent(self, e):
QPushButton.mousePressEvent(self, e)
if e.button() == Qt.LeftButton:
print('press')
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setAcceptDrops(True)
self.button = Button(' ', self)
self.button.move(100, 65)
self.setGeometry(300, 300, 280, 150)
self.setWindowTitle(' ')
def dragEnterEvent(self, e):
e.accept()
def dropEvent(self, e):
position = e.pos()
self.button.move(position)
e.setDropAction(Qt.MoveAction)
e.accept()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
코드 예제 에서 창 에 QPushButton 단추 가 있 습 니 다.만약 우리 가 마우스 왼쪽 단 추 를 누 르 면,'press'메 시 지 를 콘 솔 에 인쇄 합 니 다.마우스 우 클릭 으로 단 추 를 누 르 고 마 우 스 를 이동 하면 드래그 버튼 컨트롤 이 벤트 를 실행 합 니 다.
class Button(QPushButton):
def __init__(self, title, parent):
super().__init__(title, parent)
QPushButton 에서 Button 클래스 를 만 듭 니 다.우 리 는 또한 QPushButton 의 두 가지 방법 인 mouse MoveEvent()와 mousePress Event()를 다시 썼 다.이 mouse MoveEvent()방법 은 드래그 동작 이 시 작 된 곳 입 니 다.
if e.buttons() != Qt.RightButton:
return
드래그 이벤트 실행 은 마우스 오른쪽 단추 만 사용 할 수 있 음 을 확인 합 니 다.마우스 왼쪽 단 추 를 누 르 면 이벤트 에 사 용 됩 니 다.
mimeData = QMimeData()
drag = QDrag(self)
drag.setMimeData(mimeData)
drag.setHotSpot(e.pos() - self.rect().topLeft())
QDrag 대상 을 만 듭 니 다.이 클래스 는 MIME 기반 드래그 데이터 전송 을 지원 합 니 다.
drag.exec_(Qt.MoveAction)
대상 을 끌 어 당 기 는 start()시작 방법.
def mousePressEvent(self, e):
QPushButton.mousePressEvent(self, e)
if e.button() == Qt.LeftButton:
print('press')
만약 우리 가 마우스 왼쪽 단 추 를 눌 러 서 단 추 를 누 르 면,'press'를 콘 솔 로 인쇄 합 니 다.마우스 버튼 정 보 를 얻 기 위해 서 는 mousePress Event()방법 을 사용 합 니 다.
position = e.pos()
self.button.move(position)
dropEvent()방법 에 있 는 코드 는 마우스 단 추 를 놓 고 드래그 앤 드 롭 작업 을 완료 하 라 고 알려 줍 니 다.현재 마우스 포인터 위 치 를 찾 아 단 추 를 해당 위치 로 이동 합 니 다.
e.setDropAction(Qt.MoveAction)
e.accept()
우 리 는 동작 을 배치 하 는 유형 을 지정 합 니 다.현재 상황 에서 그것 은 이동 동작 이다.프로그램 실행 후
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Qt Designer와 PyQt5로 GUI인 MQTT 구독자를 만들 때의 메모직장의 건물이 신축되었으므로, 각 층의 분전반에 전력계를 설치해, 1곳에서 모니터링할 수 있는 시스템을 구축하려고 생각했다. 전력계는 을 참고로 제작했다. 시스템의 전체도 Windows10상에, 선인의 지혜를 참고로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.