PyQt5 에는 미디어 파일을 다루는 클래스가 별도로 있습니다. QtGui 패키지에 포함되어 있습니다. 이미지관련클래스는 QImage, QPixmap, QBitmap, QPicture 가 있습니다. 이미지를 읽거나 픽셀을 조작하고 싶다면 QImage 사용합니다. 그리고 화면에 이미지를 표현할 때는 QPixmap 을 이용합니다.
1. 화면에 이미지 표시하기
▼ 화면에 이미지를 표시하기 위해서는 QPixmap 와 QLabel 이 필요합니다. QPixmap 은 이미지를 다루는 클래스이며, QLabel 객체를 이용해서 화면에 표시합니다. 먼저 QtGui 모듈에 있는 QPixmap 클래스를 추가하고 객체를 생성합니다. 생성자 파라미터로 이미지 Path 를 넘깁니다.
from PyQt5.QtGui import QPixmap
# QPixmap 객체
self.pixmap = QPixmap('images/bg.jpg')
▼ 다음은 QLabel 객체를 생성하고 setPixmap() 함수를 이용해서 QPixmap 객체를 추가합니다. 화면에는 QPixmap 이 가져온 이미지를 QLabel 에 표시합니다. QMainWindow 화면과 이미지를 표시할 QLabel 화면의 구분을 위해 margin 을 줘서 공간을 띄웠습니다. 사용한 함수는 setContentsMargins() 입니다. 그리고 QLabel 은 QPixmap 이 불러온 이미지 크기만큼 윈도우의 크기를 재설정합니다. resize() 함수의 파라미터로 이미지의 가로/세로 크기를 입력합니다.
from PyQt5.QtWidgets import QLabel
# 이미지를 추가할 라벨
self.label = QLabel(self)
self.label.setPixmap(self.pixmap) # 이미지 세팅
self.label.setContentsMargins(10, 10, 10, 10)
self.label.resize(self.pixmap.width(), self.pixmap.height())
2. QFileDialog 이용해서 원하는 이미지 표시하기
▼ 이번에는 파일 다이얼로그(QFileDialog) 를 이용해서 사용자가 선택한 이미지를 화면에 표시해 보겠습니다. 추가할 위젯은 QPushButton 과 QFileDialog 입니다. QFileDialog 객체를 생성하고 getOpenFileName() 함수를 이용해서 사용자가 선택한 파일의 정보를 반환받습니다.
from PyQt5.QtWidgets import QFileDialog
fname = QFileDialog.getOpenFileName(self, 'Open File', '',
'All File(*);; Image File(*.png *.jpg)')
▼ 위에서 QFileDialog 로 사용자가 선택한 파일의 정보를 반환 받아 fname 변수에 저장했습니다. fname 의 object type 은 튜플(tuple) 입니다. 튜플은 순서가 있는 객체의 집합입니다. 그래서 인덱스로 접근이 가능합니다. 첫 번째 인덱스에는 파일 경로가 담겨져 있는데, if 로 값이 없으면 “파일을 선택하지 않았습니다. “ 라는 메시지를 띄웁니다.
QFileDialog 로 사용자가 선택한 이미지 파일의 경로를 알아낸 뒤 QPixmap 의 생성자 함수 파라미터로 넘겨서 객체를 생성합니다. QLabel 객체에 이미지를 띄우기 위해 setPixmap() 함수를 이용해서 QPixmap 객체를 추가합니다.
if fname[0]:
# QPixmap 객체
pixmap = QPixmap(fname[0])
self.label.setPixmap(pixmap) # 이미지 세팅
self.label.setContentsMargins(10, 30, 10, 10)
self.label.resize(pixmap.width(), pixmap.height())
# 이미지의 크기에 맞게 Resize
self.resize(pixmap.width(), pixmap.height())
else:
QMessageBox.about(self, 'Warning', '파일을 선택하지 않았습니다.')
▼ 수정한 전체 소스는 다음과 같습니다.
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QMainWindow, QLabel, QPushButton, \
QApplication, QFileDialog, QMessageBox
from PyQt5.QtGui import QPixmap
'''
버튼을 클릭해서 화면에 이미지를 추가한다. 파일 경로도 표현한다.
'''
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 윈도우 설정
self.setGeometry(300, 300, 400, 300) # x, y, w, h
self.setWindowTitle('Status Window')
# QButton 위젯 생성 - FileDialog 을 띄위기 위한 버튼
self.button = QPushButton('QFileDialog Open', self)
self.button.clicked.connect(self.filedialog_open)
self.button.setGeometry(10, 10, 200, 30)
# 이미지를 추가할 라벨
self.label = QLabel(self)
def filedialog_open(self):
fname = QFileDialog.getOpenFileName(self, 'Open File', '',
'All File(*);; Image File(*.png *.jpg)')
if fname[0]:
# QPixmap 객체
pixmap = QPixmap(fname[0])
self.label.setPixmap(pixmap) # 이미지 세팅
self.label.setContentsMargins(10, 50, 10, 10)
self.label.resize(pixmap.width(), pixmap.height())
# 이미지의 크기에 맞게 Resize
self.resize(pixmap.width(), pixmap.height())
else:
QMessageBox.about(self, 'Warning', '파일을 선택하지 않았습니다.')
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
'파이썬 > PyQt5' 카테고리의 다른 글
파이썬(Python) PyQt5 QRadioButton 선택 사용하기 (0) | 2021.11.17 |
---|---|
파이썬(Python) PyQt5 QPushButton 버튼 사용하기 (1) | 2021.11.16 |
파이썬(Python) PyQt5 QListWidget 위젯 사용하기 (2) | 2021.11.13 |
파이썬(Python) PyQt5 QMainWindow 에서 QToolBar 추가하기 (0) | 2021.11.12 |
파이썬(Python) PyQt5 QLabel 라벨 사용하기 (0) | 2021.11.11 |