QPainter QColorDialog Неожиданные значения (проблема с цветовым пространством?)

Я использую PySide6 на MacOS Catalina (10.15.7).

Я пытался что-то сделать с QColorDialog и получил неожиданные значения. Я считаю, что это должно быть связано с некоторыми преобразованиями цветового пространства, но я не понимаю, что происходит и как это исправить.

В качестве примера я нарисовал участок цвета, используя шестнадцатеричное значение #ACC0C6. Когда я запускаю палитру цветов и использую пипетку, чтобы выбрать цвет этого участка, возвращаемый цвет представляет собой шестнадцатеричное значение #ADC0C7. Код, который я использовал, приведен ниже.

Когда я использовал Mac Digital Color Meter для проверки цвета патча, параметр «Отображать собственные значения» показывает ожидаемый шестнадцатеричный код, а «Отображать в sRGB» показывает то же значение, что и QColorDialog.

У меня калиброванный дисплей, поэтому я думаю, что профиль калибровки дисплея меняет цвет. Я просто совсем не уверен, что с этим делать.

      #!/usr/bin/env python

import sys
from PySide6.QtWidgets import ( 
    QApplication, QColorDialog, QVBoxLayout, QPushButton, QWidget, )
from PySide6.QtCore import ( Qt, QRect, ) 
from PySide6.QtGui import ( QBrush, QColor, QPainter, QPen, )

class Test(QWidget):
    def __init__(self):
        super().__init__()
        self.setMinimumSize(200,200)
        self.layout = QVBoxLayout(self)
        btn = QPushButton("Pick")
        btn.clicked.connect(self.chooseColor) 
        self.layout.addWidget(btn)
        self.layout.addWidget(ColorPatch())
        self.show()

    def chooseColor(self):
        clrpick = QColorDialog()
        clrpick.setOption(QColorDialog.DontUseNativeDialog)
        print(clrpick.testOption(QColorDialog.DontUseNativeDialog))
        color = clrpick.getColor()
        if color.isValid():
            self.colorfg = color

class ColorPatch(QWidget):
    def __init__(self):
        super().__init__()
        self.painter = QPainter()
        self.nopen = QPen()
        self.nopen.setStyle(Qt.NoPen)
    
    def paintEvent(self, event):
        self.painter.begin(self)
        brush = QBrush()
        brush.setColor(QColor('#ACC0C6'))
        brush.setStyle(Qt.SolidPattern)
        self.painter.setPen(self.nopen)
        self.painter.setBrush(brush)
        self.painter.drawRect(0,0,self.width(),self.height())
        self.painter.end()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setAttribute(Qt.ApplicationAttribute.AA_DontShowIconsInMenus, True)
    window = Test()
    sys.exit(app.exec())

ДОПОЛНИТЕЛЬНЫЙ ВОПРОС: Параметр QColorDialog.DontUseNativeDialog, похоже, не работает для меня, хотя проверка этого параметра перед отображением диалогового окна показывает, что он установлен правильно. Это проблема, характерная для MacOS или ее версии (в моем случае 10.15.7?)

0 ответов

Другие вопросы по тегам