PyQt5: "Не заполнять" в диалоге цветов?

Я кодирую GUI в PyQt5, где мне нужен палитра цветов. До сих пор я использую класс QColorDialog, который отлично работает для выбора цвета, но моя проблема в том, что, похоже, нет способа выбрать "нет цвета" (или "нет заливки", как это известно из PowerPoint или Adobe Illustrator),

Как добиться, чтобы выбрать "без цвета"? (В документации упоминается только флаг прозрачности, но это мне не поможет...)

1 ответ

Решение

Если вы не возражаете против использования не родного диалога, его очень легко настроить.

Ниже приведена очень простая реализация, которая показывает, как встроить существующее диалоговое окно и добавить дополнительную кнопку "Нет цвета" внизу. Остальная часть реализации оставлена ​​в качестве упражнения для читателя...

from PyQt5 import QtCore, QtWidgets

class ColorDialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        widget = QtWidgets.QColorDialog()
        widget.setWindowFlags(QtCore.Qt.Widget)
        widget.setOptions(
            QtWidgets.QColorDialog.DontUseNativeDialog |
            QtWidgets.QColorDialog.NoButtons)
        layout = QtWidgets.QVBoxLayout(self)
        layout.addWidget(widget)
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(QtWidgets.QPushButton('No Color'))
        hbox.addWidget(QtWidgets.QPushButton('Cancel'))
        hbox.addWidget(QtWidgets.QPushButton('Ok'))
        layout.addLayout(hbox)

if __name__ == '__main__':

    import sys
    app = QtWidgets.QApplication(sys.argv)
    dialog = ColorDialog()
    dialog.show()
    sys.exit(app.exec_())
Другие вопросы по тегам