061.PyQt5_QColorDialog_颜色选择对话框

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时,要加上这句才生效
    
  • 调色板的影响范围
    1. 修改QApplication的调色板, 会影响到该应用程序的所有窗口部件.
    2. 对QApplication调色板的修改, 不会影响已经单独做了调色板修改的窗口部件.
    3. 修改一个窗口部件的调色板, 只影响这个窗口部件以及子窗口部件(不包含子窗口, 如只是以当前窗口作为父对象来管理内存, 而不在当前窗口显示);
    4. 对一个窗口部件的调色板作了修改后,再对其父窗口部件调色板进行修改, 不会影响到该窗口部件的调色板;
  • 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)子窗口部件(不包含窗口)
      • 常用的颜色策略:
        1. 窗口标题栏: 活动状态(Active)的为蓝色, 非活动状态(inactive)的为灰色;
        2. 活动状态的窗口和非活动状态的窗口都可以包含状态为不可用(Disabled)的窗口部件;
        3. 一个不可用的窗口部件(包括该窗口部件包含的子窗口部件)显示为灰色, 用户无法同它进行交互;
    • 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.ToolTipBaseQToolTip背景色
        QPalette.ToolTipTextQToolTip前景色
        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~100
        CMYK印刷四色模式减色模式
        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)
        

  • 代码示例
  • 示例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_())
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值