import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel, QLineEdit, QFileDialog
from PySide6.QtGui import QPixmap, QImage, QColor
from PySide6.QtCore import Qt
class ImageApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.layout = QVBoxLayout()
self.setLayout(self.layout)
# ボタンを追加して画像を選択
self.btn = QPushButton('画像を開く', self)
self.btn.clicked.connect(self.openImage)
self.layout.addWidget(self.btn)
# 画像と情報を表示するラベル
self.imageLabel = QLabel(self)
self.layout.addWidget(self.imageLabel)
self.infoLabel = QLineEdit(self)
self.layout.addWidget(self.infoLabel)
self.colorLabel = QLabel(self) # 色を表示するラベル
self.layout.addWidget(self.colorLabel)
self.setWindowTitle('Image Viewer')
self.setGeometry(300, 300, 350, 250)
def openImage(self):
fname, _ = QFileDialog.getOpenFileName(self, '画像を開く', '/home')
if fname:
self.pixmap = QPixmap(fname)
self.imageLabel.setPixmap(self.pixmap)
self.imageLabel.mouseMoveEvent = self.displayImageInfo
def displayImageInfo(self, event):
x = event.position().x()
y = event.position().y()
image = self.pixmap.toImage()
if x < image.width() and y < image.height():
color = QColor(image.pixel(x, y))
rgb = (color.red(), color.green(), color.blue())
hsv = color.toHsv()
hsv_values = (hsv.hue(), hsv.saturation(), hsv.value())
self.infoLabel.setText(f'座標: ({x},{y}), RGB: {rgb}, HSV: {hsv_values}')
self.showColorSample(color)
def showColorSample(self, color):
# 色のサンプルを表示するための小さな四角形を作成
colorSample = QImage(50, 50, QImage.Format_RGB32)
colorSample.fill(color)
self.colorLabel.setPixmap(QPixmap.fromImage(colorSample))
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = ImageApp()
ex.show()
sys.exit(app.exec())