반응형
PDF 파일을 드래그/드롭으로 가져오는 방법입니다.
이렇게 pdf파일을 끌어오면 읽게 됩니다.
#파일 끌어오는 부분
class FileLabel(QLabel):
def __init__(self):
super().__init__()
self.setAlignment(Qt.AlignCenter)
self.setText('파일을 끌어오세요')
self.setStyleSheet('''
QLabel{
border: 4px dashed #aaa;
font-size: 15pt;
font-family:'Malgun Gothic';
}
''')
파일을 끌어오는 화면 부분입니다.
setStyleSheet 부분에 원하는 스타일을 주면 됩니다.
#파일 끌어오기
def dragEnterEvent(self, event):
if self.find_pdf(event.mimeData()):
event.accept()
else:
event.ignore()
파일을 끌어오는 부분입니다.
find_pdf로 끌어온 파일이 pdf인지 확인합니다.
pdf가 맞다면 다음으로 넘어갑니다. pdf가 아닐 경우 끌어와지지 않습니다.
def find_pdf(self, mimedata):
urls = list()
db = QMimeDatabase()
for url in mimedata.urls():
mimetype = db.mimeTypeForUrl(url)
if mimetype.name() == "application/pdf":
urls.append(url)
return urls
pdf 파일이 맞는지 검증하는 함수입니다.
끌어온 파일 중 pdf만 urls에 담아서 전달합니다.
#파일 놓기
def dropEvent(self, event):
urls = self.find_pdf(event.mimeData())
if urls:
for url in urls:
print(url.toLocalFile())
event.accept()
else:
event.ignore()
파일을 끌어서 놓았을 때 처리되는 함수입니다.
print(url.toLocalFile()) 부분에 처리할 내용을 넣으시면 됩니다.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QMessageBox
from PyQt5.QtCore import Qt, QMimeDatabase
#파일 끌어오는 부분
class FileLabel(QLabel):
def __init__(self):
super().__init__()
self.setAlignment(Qt.AlignCenter)
self.setText('파일을 끌어오세요')
self.setStyleSheet('''
QLabel{
border: 4px dashed #aaa;
font-size: 15pt;
font-family:'Malgun Gothic';
}
''')
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.resize(400, 400)
self.setAcceptDrops(True)
layout = QVBoxLayout()
self.filebox = FileLabel()
layout.addWidget(self.filebox)
self.setLayout(layout)
self.setWindowTitle('파일 drap/drop')
#파일 끌어오기
def dragEnterEvent(self, event):
if self.find_pdf(event.mimeData()):
event.accept()
else:
event.ignore()
def dragMoveEvent(self, event):
if self.find_pdf(event.mimeData()):
event.accept()
else:
event.ignore()
#파일 놓기
def dropEvent(self, event):
urls = self.find_pdf(event.mimeData())
if urls:
for url in urls:
print(url.toLocalFile())
event.accept()
else:
event.ignore()
def find_pdf(self, mimedata):
urls = list()
db = QMimeDatabase()
for url in mimedata.urls():
mimetype = db.mimeTypeForUrl(url)
if mimetype.name() == "application/pdf":
urls.append(url)
return urls
if __name__ == "__main__":
app = QApplication(sys.argv)
myWindow = MyApp()
myWindow.show()
app.exec_()
전체 소스입니다.
반응형
'개발 > PyQt&Python' 카테고리의 다른 글
파이썬 zipfile 모듈(python 압축파일 다루는 방법) (0) | 2022.11.24 |
---|---|
PyQt tablewidget에 checkbox 추가 / 정렬되게 만들기 (0) | 2022.11.11 |
파이썬 디렉터리/파일 관련 함수 정리(os/os.path/glob,shutil) (0) | 2022.11.09 |
PyQt 하이퍼링크(QLabel, QPushButton) 달기, 스타일 변경 (0) | 2022.11.09 |
PyInstaller - 파이썬 exe파일 만드는 방법(아이콘,파일,이미지 추가하기) (0) | 2022.11.06 |
댓글