PyQT5 - 랜덤 컬러 그리드 생성하기Qt/PyQt5 강좌2024. 4. 17. 21:22
Table of Contents
반응형
PyQt5를 사용하여 격자에 랜덤으로 컬러 그리드를 생성한 예제입니다.
2024. 4. 17 최초작성
import sys import numpy as np from PyQt5.QtWidgets import QApplication, QDialog, QLabel, QVBoxLayout from PyQt5.QtGui import QPixmap, QImage from PyQt5.QtCore import QThread, pyqtSignal import matplotlib class Thread(QThread): updated = pyqtSignal(np.ndarray) def run(self): while True: original_array = np.random.randint(0, 256, (5, 5)) self.updated.emit(original_array) QThread.sleep(1) class ImageDialog(QDialog): def __init__(self): super().__init__() self.initUI() self.update_thread = Thread() self.update_thread.updated.connect(self.updateImage) self.update_thread.start() def initUI(self): self.setWindowTitle('inferno') self.label = QLabel(self) self.layout = QVBoxLayout() self.layout.addWidget(self.label) self.setLayout(self.layout) def updateImage(self, original_array): # 'plasma' 컬러맵을 사용하여 각 값에 대응하는 RGB 색상 계산. 0 ~ 1 사이 값으로 구성 cmap = matplotlib.colormaps['plasma'] # RGB 색상 선택. original_array는 0~255 사이값이고 cmap을 선택 rgb_colors = cmap(original_array)[:,:,:3] # RGB 색상을 갖는 확대된 배열 생성 scaled_rgb_array = np.kron(rgb_colors, np.ones((100, 100, 1))) # 0~255 사이 값으로 변환하고 데이터 타입을 uint8로 변환 scaled_rgb_array = (scaled_rgb_array * 255).astype(np.uint8) height, width, _ = scaled_rgb_array.shape # 한 줄 당 바이트 수는 너비 * 채널 수 bytes_per_line = 3 * width q_image = QImage(scaled_rgb_array.data, width, height, bytes_per_line, QImage.Format_RGB888) pixmap = QPixmap.fromImage(q_image) self.label.setPixmap(pixmap) app = QApplication(sys.argv) dialog = ImageDialog() dialog.show() sys.exit(app.exec_()) |
반응형
'Qt > PyQt5 강좌' 카테고리의 다른 글
PyQt5 QTableWidget 예제 (0) | 2024.05.23 |
---|---|
PyQt5에서 윈도우의 모든 창 버튼(최소화, 최대화, 닫기)을 제거 (0) | 2024.05.21 |
pyQt5 - process에서 메시지 박스를 보여주는 예제 (0) | 2024.04.14 |
PyQt5 예제 - 단축키로 버튼 누르기 (0) | 2024.04.12 |
PyQtGraph 다른 모니터로 윈도우 이동시 그래프가 깨지는 현상 해결 방법 (0) | 2024.02.21 |