QColorDialog 颜色选择对话框
- 描述
- 颜色对话框的功能是允许用户选择颜色
- 继承自:QDialog
- 功能作用
- 构造函数
QColorDialog(parent: QWidget = None) # 创建对象的同时设置父对象 QColorDialog(Union[QColor, Qt.GlobalColor, QGradient], parent: QWidget = None) # 创建对象的同时通过QColor对象设置默认颜色和父对象
- 打开对话框
open(self) open(PYQT_SLOT) # 打开后, 会自动连接colorSelected信号与此处指定的槽函数 exec() -> int # 返回是否点击确定
- 当前颜色
setCurrentColor(QColor()) # 设置当前颜色 currentColor() -> QColor # 获取当前颜色
- 最终选中颜色
selectedColor() # 获取最后选择的颜色
- 选项控制
setOption(self, QColorDialog.ColorDialogOption, on: bool = True) setOptions(self, Union[QColorDialog.ColorDialogOptions, QColorDialog.ColorDialogOption]) testOption(self, QColorDialog.ColorDialogOption) # 补充 # 参数:QColorDialog.ColorDialogOption QColorDialog.ShowAlphaChannel # 允许用户选择颜色的alpha分量(透明度)。 QColorDialog.NoButtons # 不显示“ 确定”和“ 取消”按钮。(对“实时对话框”有用。) QColorDialog.DontUseNativeDialog # 使用Qt的标准颜色对话框而不是操作系统原生颜色对话框。
- 静态方法
customCount() -> int # 获取自定义颜色区域的块个数 setCustomColor(int index, QColor color) # 根据索引设置自定义颜色区域指定块的颜色,需要在对象创建之前设置 customColor(int index) -> QColor # 获取标准颜色区域的块个数 setStandardColor(int index, QColor color) # 根据索引设置标准颜色区域指定块的颜色,需要在对象创建之前设置 standardColor(int index) -> QColor # 通过索引获取标准颜色区域指定块的颜色 getColor(initial: Union[QColor, Qt.GlobalColor, QGradient] = Qt.white, parent: QWidget = None, title: str = '', options: Union[QColorDialog.ColorDialogOptions, QColorDialog.ColorDialogOption] = QColorDialog.ColorDialogOptions()) -> QColor # 打开颜色选择对话框,并返回一个QColor对象 # 参数 initial:设置默认颜色 parent:设置父对象 title:设置对话框标题 options:设置选项 # 返回值:返回QColor对象(点取消时,返回黑色)
- 构造函数
- 可用信号
currentColorChanged(QColor color) # 当前选择颜色发生改变时发射该信号 colorSelected(QColor color) # 最后确定选择颜色时发射该信号
- 补充QPalette(调色板)
- https://www.cnblogs.com/gaiqingfeng/p/13274916.html
- 哪些部件有QPalette
- QPalette可以用来设置组件的颜色(组件的颜色还可以通过QSS来设置,另行讨论)
- 所有的Qt窗口都有一个QPalette
- QApplication也有一个QPalette
- 如何通过调色板设置颜色
# 方法一 palette = QPalette() # 获取palette对象 palette.setColor(colorRole, color) # 为palette对象指定角色和要设置的颜色 labe.setPalette(palette) # 为控件设置调色板 labe.setAutoFillBackground(bool) # 设置自动填充背景属性。角色为Background时,要加上这句才生效 # 方法二 palette = widget.palette() # 获取控件的palette对象 palette.setColor(colorRole, color) # 为palette对象指定角色和要设置的颜色 widget.setPalette(palette) # 为控件设置调色板 widget.setAutoFillBackground(bool) # 设置自动填充背景属性。角色为Background时,要加上这句才生效
- 调色板的影响范围
- 修改QApplication的调色板, 会影响到该应用程序的所有窗口部件.
- 对QApplication调色板的修改, 不会影响已经单独做了调色板修改的窗口部件.
- 修改一个窗口部件的调色板, 只影响这个窗口部件以及子窗口部件(不包含子窗口, 如只是以当前窗口作为父对象来管理内存, 而不在当前窗口显示);
- 对一个窗口部件的调色板作了修改后,再对其父窗口部件调色板进行修改, 不会影响到该窗口部件的调色板;
- color group和color role
- 调色板有两个基本概念:color group 和 color role,
- 调色板的setColor()命令通过color group和color role进行颜色设置。
setColor(QPalette.ColorGroup, QPalette.ColorRole, color_name) setColor(QPalette.ColorRole, color_name)
- color_name:
- 可以是Qt预定义的颜色,比如:QtCore.Qt.yellow
- 可以是通过QColor指定的颜色,比如QColor('#ffffff')或QColor(0, 1, 2), 具体可查看QColor的method。
- ColorGroup
名称 说明 Active Group 该组的颜色用于当前活动的(active)窗口,即具有键盘或鼠标焦点的窗口 Inactive Group 该组的颜色用于非活动的(其他)窗口 Disable Group 该组的颜色用于窗口为不可用的(disabled)子窗口部件(不包含窗口) - 常用的颜色策略:
- 窗口标题栏: 活动状态(Active)的为蓝色, 非活动状态(inactive)的为灰色;
- 活动状态的窗口和非活动状态的窗口都可以包含状态为不可用(Disabled)的窗口部件;
- 一个不可用的窗口部件(包括该窗口部件包含的子窗口部件)显示为灰色, 用户无法同它进行交互;
- 常用的颜色策略:
- ColorRoles
- 参数说明
名称 说明 QPalette.Window 窗口部件背景色(QPalette.Background已废弃) QPalette.WindowText 窗口部件前景色(文本颜色)(QPalette.Foreground已废弃) QPalette.Base 文本输入部件(QLineEdit等)背景色 QPalette.Text 文本输入部件(QLineEdit等)前景色(文本颜色) QPalette.Button 按钮部件背景色(注: QPushButton的背景颜色涉及样式表, 所以不能通过QPalette修改) QPalette.ButtonText 按钮部件前景色(文件颜色) QPalette.Highlight 文字被选中后的背景色 QPalette.HighlightedText 文字被选中后的前景色(文本颜色) QPalette.ToolTipBase QToolTip背景色 QPalette.ToolTipText QToolTip前景色 Qpalette.AlternateBase ? Qpalette.BrightText ?
- QtGui.QColor
- QColor提供基于RGB、HSV、CMYK值的颜色
名称 中文名 说明 RGB 红绿蓝 加色模式
Red: 红色, RGB(255,0,0)
Green: 绿色, RGB(0,255,0)
Blue: 蓝色, RGB(0,0,255)HSV ? Hue: 色调, 0~360(红:0, 绿:120, 蓝:240, 黄:60, 青:180, 品红:300)
Saturation: 饱和度, 0~100
Value: 明度, 0~100CMYK 印刷四色模式 减色模式
Cyan: 青色/天蓝色, RGB(0, 255, 255)
Megenta: 品红/洋红, RGB(255,0,255)
Yellow: 黄色, RGB(255,255,0)
blacK:黑色(取尾字母,防止与Blue混淆)SVG1.0 颜色值 颜色名称是RGB对应的16进制数组成的字符串 #{Red}{Green}{Blue}
比如RGB(10,20,30)对应 #0A141E - QColor的常用Method:
QColor(Qt.black) # 通过颜色名称初始化QColor实例 QColor('#FFFFFF') # 通过颜色HTML代号初始化QColor实例 QColor(i_red, i_green, i_blue) # 通过RGB值初始化QColor实例 QColor.fromHsv(i_hue, i_saturation, i_value) # 通过HSV值初始化QColor实例 QColor.colorNames() # 获取内置的颜色名列表 QColor(0,1,2).getRgb() # 获取RGB值的tuple,(0,1,2,255) QColor(0,1,2).getHsv() # 获取HSV值的tuple,(210,255,2,255)
- QColor提供基于RGB、HSV、CMYK值的颜色
- 代码示例
- 示例1:QColorDialog功能作用
from PyQt5.Qt import * import sys class Windows(QWidget): def __init__(self): super().__init__() self.setWindowTitle('QColorDialog-功能作用') self.resize(500, 500) self.widget_list() def widget_list(self): self.add_widget() def add_widget(self): # 创建对象 fontd = QFontDialog(self) colord = QColorDialog(self) labe = QLabel('学编程,学Python',self) labe.move(10, 150) # colord.open() btn1 = QPushButton('选择字体', self) btn1.move(10, 10) btn2 = QPushButton('选取颜色', self) btn2.move(10, 50) # ***************静态方法******************* 开始 def font_select(): # 方法一:无需提前创建对象 result = QFontDialog.getFont() # 方法二:需要提前创建对象 # result = fontd.getFont() if result[1]: labe.setFont(result[0]) labe.adjustSize() def color_select(): # 方法一:无需提前创建对象 result2 = QColorDialog.getColor() # 方法二:需要提前创建对象 # result2 = colord.getColor() # 创建调色板方法一: palette = QPalette() palette.setColor(QPalette.Background, result2) labe.setPalette(palette) labe.setAutoFillBackground(True) # 创建调色板方法二: # pale = labe.palette() # pale.setColor(QPalette.Background, result2) # labe.setPalette(pale) # labe.setAutoFillBackground(True) btn1.clicked.connect(font_select) btn2.clicked.connect(color_select) # ***************静态方法******************* 结束 if __name__ == '__main__': app = QApplication(sys.argv) window = Windows() window.show() sys.exit(app.exec_())
- 示例2:可用信号
from PyQt5.Qt import * import sys class Windows(QWidget): def __init__(self): super().__init__() self.setWindowTitle('QColorDialog-可用信号') self.resize(500, 500) self.widget_list() def widget_list(self): self.add_widget() def add_widget(self): btn = QPushButton('选择颜色', self) colord = QColorDialog(self) def select_color(color): palette = QPalette() palette.setColor(QPalette.Window, color) self.setPalette(palette) # 当前颜色发生改变时发射信号 # colord.currentColorChanged.connect(select_color) # 最终选择颜色时发射信号 colord.colorSelected.connect(select_color) def color_test(): colord.open() btn.clicked.connect(color_test) if __name__ == '__main__': app = QApplication(sys.argv) window = Windows() window.show() sys.exit(app.exec_())