이미지 경로 앞에 썸네일을 표시하기
아직 이미지 파일만 가져오는 것을 완료하지 않았다면 이전 글 참고
Python 이미지 세로로 합치기 - 10 (이미지 파일 필터)
이미지 파일만 드래그 되도록 만들어 보자. 폴더에 있는 파일을 전체 선택해서 드래그해서 리스트 위젯에 넣더라도 프로그램이 자동으로 이미지파일만 선별해서 넣도록 해보자. 1. 함수 생성 a.
udangco-coding-record.tistory.com
1. icon을 활용
def dropEvent(self, event):
img_file = self.find_img(event.mimeData())
if img_file:
if event.mimeData().hasUrls():
event.setDropAction(Qt.CopyAction)
event.accept()
for file in img_file:
icon = QtGui.QIcon(str(file.toLocalFile())) # 아이콘 형태로 이미지 가져오기
show_file = QtWidgets.QListWidgetItem(str(file.toLocalFile()))
self.addItem(show_file)
else:
event.ignore()
else:
event.ignore()
dropEvent 함수의 for loop에
icon 변수에
QtGui.QIcon: 아이콘 형태로 이미지를
str(file.toLacoalFile()): 파일 경로에서 가져오라
2. show_file 변경
show_file = QtWidgets.QListWidgetItem(icon, str(file.toLocalFile()))
icon 아래에 show_file안에 icon, 을 추가해 주자.
3. 썸네일 사이즈 변경
이대로 실행하면 썸네일이 너무 작다.
사이즈를 넓이 50, 높이 50으로 변경해 보자.
ListBoxWidget의 __init__ 함수 아래에 self.setIconSize(QSize(50, 50))을 추가하자.
class ListBoxWidget(QListWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setAcceptDrops(True)
self.setIconSize(QSize(50, 50)) # 썸네일 사이즈 변경
전체코드
import os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QSize, Qt, QMimeDatabase
from PyQt5.QtWidgets import QMainWindow, QMessageBox, QListWidget
import mimetypes
# drag and drop event. 파일 위치 경로를 가져오기
class ListBoxWidget(QListWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setAcceptDrops(True)
self.setIconSize(QSize(50, 50)) # 썸네일 사이즈 변경
def dragEnterEvent(self, event):
if event.mimeData().hasUrls:
event.accept()
else:
event.ignore()
def dragMoveEvent(self, event):
if event.mimeData().hasUrls():
event.setDropAction(Qt.CopyAction)
event.accept()
else:
event.ignore()
def dropEvent(self, event):
img_file = self.find_img(event.mimeData())
if img_file:
if event.mimeData().hasUrls():
event.setDropAction(Qt.CopyAction)
event.accept()
for file in img_file:
icon = QtGui.QIcon(str(file.toLocalFile())) # 아이콘 형태로 이미지 가져오기
show_file = QtWidgets.QListWidgetItem(icon, str(file.toLocalFile()))
self.addItem(show_file)
else:
event.ignore()
else:
event.ignore()
def find_img(self, mimedata):
file_list = list()
db = QMimeDatabase()
for file in mimedata.urls():
mimetype = db.mimeTypeForUrl(file) # pyqt mimetype 이용
mimetype_e = mimetypes.guess_type(file.toString())[0]
if (mimetype.name() == "image/bmp") or (mimetype.name() == "image/gif") or (mimetype.name() == "image/jpeg") or (mimetype.name() == "image/png"):
file_list.append(file)
elif (mimetype_e == "image/bmp") or (mimetype_e == "image/gif") or (mimetype_e == "image/jpeg") or (mimetype_e == "image/png"):
file_list.append(file)
else:
pass
return file_list
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(690, 641)
self.groupBox = QtWidgets.QGroupBox(Form)
self.groupBox.setGeometry(QtCore.QRect(30, 30, 631, 51))
self.groupBox.setObjectName("groupBox")
self.lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.lineEdit.setGeometry(QtCore.QRect(10, 20, 151, 20))
self.lineEdit.setObjectName("lineEdit")
self.groupBox_2 = QtWidgets.QGroupBox(Form)
self.groupBox_2.setGeometry(QtCore.QRect(30, 90, 631, 51))
self.groupBox_2.setObjectName("groupBox_2")
self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox_2)
self.lineEdit_2.setGeometry(QtCore.QRect(10, 20, 541, 20))
self.lineEdit_2.setObjectName("lineEdit_2")
self.groupBox_3 = QtWidgets.QGroupBox(Form)
self.groupBox_3.setGeometry(QtCore.QRect(30, 150, 631, 411))
self.groupBox_3.setObjectName("groupBox_3")
self.listWidget = ListBoxWidget(self.groupBox_3)
self.listWidget.setGeometry(QtCore.QRect(10, 20, 511, 371))
self.listWidget.setObjectName("listWidget")
self.pushButton = QtWidgets.QPushButton(self.groupBox_3)
self.pushButton.setGeometry(QtCore.QRect(540, 20, 75, 23))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.groupBox_3)
self.pushButton_2.setGeometry(QtCore.QRect(540, 50, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(self.groupBox_3)
self.pushButton_3.setGeometry(QtCore.QRect(540, 80, 75, 23))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_4 = QtWidgets.QPushButton(Form)
self.pushButton_4.setGeometry(QtCore.QRect(40, 570, 511, 41))
self.pushButton_4.setObjectName("pushButton_4")
self.pushButton_5 = QtWidgets.QPushButton(Form)
self.pushButton_5.setGeometry(QtCore.QRect(570, 570, 71, 41))
self.pushButton_5.setObjectName("pushButton_5")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "이미지 합치기 v1.0"))
self.groupBox.setTitle(_translate("Form", "가로 사이즈 (px)"))
self.groupBox_2.setTitle(_translate("Form", "파일명"))
self.lineEdit_2.setPlaceholderText(_translate("Form", "확장자를 제외한 파일명을 입력해 주세요."))
self.groupBox_3.setTitle(_translate("Form", "이미지"))
self.pushButton.setText(_translate("Form", "위 이동"))
self.pushButton_2.setText(_translate("Form", "아래 이동"))
self.pushButton_3.setText(_translate("Form", "제거"))
self.pushButton_4.setText(_translate("Form", "합치기"))
self.pushButton_5.setText(_translate("Form", "초기화"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
실행해보면 썸네일이 잘 들어오는 것까지 확인될 것이다.
하지만 버튼을 아무리 눌러도 아무런 변화가 없다.
버튼에 들어갈 함수를 만들어 보자.
Python 이미지 세로로 합치기 - 12 (버튼 함수 만들기)
각 버튼이 작동하도록 함수를 만들자 아직 이미지 썸네일이 나오게 하지 못했다면 아래 글 참고 [파이썬] - Python 이미지 세로로 합치기 - 11 (이미지 썸네일 표시) 버튼 함수 만들기 1. 각 버튼 및
udangco-coding-record.tistory.com
'파이썬' 카테고리의 다른 글
Python 이미지 세로로 합치기 - 13 (버튼 연결) (0) | 2024.03.14 |
---|---|
Python 이미지 세로로 합치기 - 12 (버튼 함수 만들기) (0) | 2024.03.14 |
Python 이미지 세로로 합치기 - 10 (이미지 파일 필터) (0) | 2024.03.14 |
Python 이미지 세로로 합치기 - 9 (Drag&Drop 구현하기) (2) | 2024.03.14 |
파이썬 if문 (0) | 2024.03.14 |