PyQt5 QColorDialog – 设置自定义颜色

  • Post category:Python

当使用 PyQT5 进行 GUI 编程时,我们可能需要让用户输入或选择颜色。QColorDialog 就是一个非常好用的控件,可以让用户选择颜色。此外,QColorDialog 还可以设置自定义的颜色,下面我们就来介绍如何在 PyQT5 中使用 QColorDialog。

1. QColorDialog 基本用法

1.1 显示 QColorDialog

在 PyQT5 中使用 QColorDialog 显示颜色选择对话框非常简单,只需要使用以下语句即可:

QColorDialog.getColor()

这个语句不仅会显示颜色选择对话框,还会返回用户最终选择的颜色。

1.2 设置 QColorDialog 的默认颜色

如果你想要在 QColorDialog 中显示一些默认颜色,可以使用 QColorDialog 的 setCustomColor 方法来设置。该方法接收两个参数:颜色编号(0~15)和颜色值(QColor 类型)。以下是一个示例:

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

app = QApplication([])
dialog = QColorDialog()
dialog.setCustomColor(0, QColor(0,0,0))  # 将第 1 个默认颜色设置为黑色
dialog.setCustomColor(1, QColor(255,255,255))  # 将第 2 个默认颜色设置为白色
dialog.open()

在以上示例中,我们设置了两个默认颜色,黑色和白色,它们分别对应了颜色列表中的前两个颜色。

1.3 获取 QColorDialog 的选择结果

使用 QColorDialog 的 getColor 方法弹出颜色选择对话框,用户选择颜色后,该方法会返回用户选择的颜色,如果用户直接取消选择,该方法会返回 None。以下是一个示例:

from PyQt5.QtWidgets import QColorDialog, QApplication

app = QApplication([])
color = QColorDialog.getColor()
if color.isValid():
    # 如果 color 有效,使用该颜色
    print(color.name())
else:
    # 如果 color 无效,使用默认颜色
    print('无效颜色')

2. 使用自定义颜色

除了上面介绍的基本用法,QColorDialog 还可以通过自定义颜色来自由选择。以下示例展示如何自定义一个颜色选择控件,并将该控件嵌入到一个窗口中:

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

class ColorWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.color = None
        self.color_button = QPushButton("选择颜色")
        self.color_button.clicked.connect(self.choose_color)
        layout = QVBoxLayout()
        layout.addWidget(self.color_button)
        self.setLayout(layout)

    def choose_color(self):
        color = QColorDialog.getColor()
        if color.isValid():
            self.color = color
            self.color_button.setStyleSheet("background-color: %s;" % self.color.name())

if __name__ == '__main__':
    app = QApplication([])
    window = QWidget()
    color_widget = ColorWidget()
    layout = QVBoxLayout()
    layout.addWidget(color_widget)
    window.setLayout(layout)
    window.show()
    app.exec()

在以上示例中,我们自定义了一个控件 ColorWidget,并将 QColorDialog 嵌入到其中。用户通过点击按钮来选择颜色,选择的颜色会设置为 color_widget 的背景颜色。