Qt/PyQt5 강좌
PyQT5 - 랜덤 컬러 그리드 생성하기
webnautes
2024. 4. 17. 21:22
반응형
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_()) |
반응형