소프트웨어/Python
PYQT5 Drag & Drop 기능
Nerd Dog
2024. 2. 25. 20:14
파일을 탐색기로 일일이 찾고 넣는 게 불편해서 간편하게 인식시키는 방법이 있을까 고민하다가 찾았다. PYQT5에서 프로그램으로 파일이나 폴더를 Drag & Drop으로 인식시킬 수 있다.
전체 코드
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout
from PyQt5.QtGui import QIcon
route_first = "경로 : "
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('CheckFileRoute')
self.setWindowIcon(QIcon('resources/faviconV2.png'))
self.setGeometry(500, 300, 500, 300)
#드래그 드롭을 활성화하려면 True로 변경할 것!
self.setAcceptDrops(True)
#레이아웃 설정
layout = QVBoxLayout()
#라벨 생성 및 레이아웃 추가
self.label = QLabel(route_first,self)
layout.addWidget(self.label)
self.setLayout(layout)
self.show()
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.accept()
else:
event.ignore()
def dropEvent(self, event):
labelword = ""
files = [u.toLocalFile() for u in event.mimeData().urls()]
for f in files:
print(f)
labelword += route_first + f +"\n"
self.label.setText(labelword)
if __name__ == '__main__':
app = QApplication([])
myapp = MyApp()
app.exec_()
일단 눈여겨봐야 할 점은 3가지인데
Drag & Drop을 앱에서 활성화하려면 위젯이나 메인 윈도우에서
self.setAcceptDrops(True)
이거를 선언해 줘야 된다.
또한 미리 선언된 두 함수를 오버라이드 하여 어느 상황에서 파일을 받아들이고(dragEnterEvent) 파일을 받아들인 후 어떤 행동(dropEvent)을 할 것인지를 정해주면 될 것이다. 가져온 파일 정보는 event를 통해 알 수 있다.
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.accept()
else:
event.ignore()
def dropEvent(self, event):
labelword = ""
files = [u.toLocalFile() for u in event.mimeData().urls()]
for f in files:
print(f)
labelword += route_first + f +"\n"
self.label.setText(labelword)
3개 drag & drop 하면 다음과 같이 나온다.