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())