PyQt5 QColorDialog – 获取颜色对话框选项

  • Post category:Python

PyQt5是一个Python GUI编程工具包,其中QColorDialog类提供了一个用于调色板的对话框。它允许用户选择颜色,支持预定义的颜色和自定义颜色。以下是QColorDialog的完整使用攻略及示例说明。

QColorDialog的基本用法

引入模块

from PyQt5.QtWidgets import QApplication, QColorDialog
from PyQt5.QtGui import QColor
import sys

创建应用程序对象

app = QApplication(sys.argv)

创建QColorDialog的实例

colorDialog = QColorDialog()

调用QColorDialog的exec()方法显示对话框

colorDialog.exec_()

获取用户选择的颜色

color = colorDialog.selectedColor()

完整示例1:使用预定义颜色

下面是一个完整的QColorDialog示例,演示如何使用预定义颜色。示例中创建了一个PushButton按钮,点击按钮后会弹出颜色对话框。用户选择颜色后,按钮的背景色将会被设置为所选颜色。代码如下所示:

from PyQt5.QtWidgets import QApplication, QPushButton, QVBoxLayout, QHBoxLayout, QColorDialog, QWidget
from PyQt5.QtGui import QColor
import sys

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('QColorDialog - Predefined Colors')
        self.setGeometry(100, 100, 250, 150)

        # 创建PushButton
        btn = QPushButton('Select Color', self)
        btn.clicked.connect(self.showDialog)

        # 创建一个水平布局
        hBox = QHBoxLayout()
        hBox.addWidget(btn)

        # 创建一个垂直布局
        vBox = QVBoxLayout(self)
        vBox.addLayout(hBox)

    def showDialog(self):
        # 创建QColorDialog实例
        colorDialog = QColorDialog()

        # 设置对话框的预定义颜色
        colorDialog.setOptions(QColorDialog.ShowAlphaChannel)
        colorDialog.setCurrentColor(QColor(255, 0, 0))

        # 显示对话框
        if colorDialog.exec_():
            # 获取用户选择的颜色
            color = colorDialog.selectedColor()

            # 设置背景颜色
            self.setStyleSheet("background-color: %s;" % color.name())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

完整示例2:使用自定义颜色

下面是一个完整的QColorDialog示例,演示如何使用自定义颜色。示例中创建了一个PushButton按钮,点击按钮后会弹出颜色对话框。用户选择颜色后,将会在窗体中创建一个和选择颜色相同的矩形。代码如下所示:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QHBoxLayout, QColorDialog
from PyQt5.QtGui import QPainter, QColor, QBrush, QPen
import sys

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.color = QColor(0, 0, 0)
        self.initUI()

    def initUI(self):
        self.setWindowTitle('QColorDialog - Custom Colors')
        self.setGeometry(100, 100, 250, 150)

        # 创建PushButton
        btn = QPushButton('Select Color', self)
        btn.clicked.connect(self.showDialog)

        # 创建垂直区域
        vBox = QVBoxLayout(self)
        vBox.addWidget(btn)

        # 设置背景颜色和绘制事件
        self.setAutoFillBackground(True)
        self.paintEvent = self.drawRectangle

    def showDialog(self):
        # 创建QColorDialog实例
        colorDialog = QColorDialog()

        # 设置对话框的选项和自定义颜色
        colorDialog.setOptions(QColorDialog.ColorDialogOption.NoButtons)
        colorDialog.setCustomColor(0, QColor(0, 0, 0))
        colorDialog.setCustomColor(1, QColor(255, 0, 0))
        colorDialog.setCustomColor(2, QColor(0, 255, 0))
        colorDialog.setCustomColor(3, QColor(0, 0, 255))

        # 显示对话框
        color = colorDialog.getColor(initial=self.color)
        if color.isValid():
            self.color = color

    def drawRectangle(self, event):
        painter = QPainter(self)
        painter.setPen(QPen(Qt.NoPen))
        brush = QBrush(self.color)
        painter.setBrush(brush)
        painter.drawRect(self.rect())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

以上两个示例演示了QColorDialog的不同用法。第一个示例演示了如何使用预定义颜色,而第二个示例演示了如何使用自定义颜色。生成的 PyQt5 应用窗口中添加按钮,当单击此按钮时,会打开'颜色对话框'窗口(使用预定义或自定义颜色),使用弹出窗口选择颜色。选择颜色后关闭颜色对话框,按钮的背景颜色将设置为所选颜色,或者在窗口中显示与所选颜色相同的矩形。