GUI学习之二十六——QColorDialog学习总结

今天要讲的是QColorDialog对话框。

一.描述

  QColorDialog对话框是用来为用户提供颜色选择的对话框控件,和上一章的QFontDialog控件一样,是继承自QDialog这个基类。其使用方法和QFontDialog基本相同。

二.功能作用

  1.构造函数

  可以直接声明使用,也可以为其传递一个QColor对象作为默认颜色

color = QColor(30,40,50)
color_dialog =QColorDialog(color,self)

这里创建了一个RGB值为30,40,50的颜色对象,然后弹出看对话框就有了默认的颜色

  2.打开对话框

  打开对话框有三种常用方法:

QColorDialog.show()
QColorDialog.open()
QColorDialog.exec()

如果用show()方法话是可以发射colorSelected这个信号的

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()
        self.resize(800,500)


    def UI_test(self):
        btn = QPushButton('color',self)
        btn.move(50,50)
        btn.clicked.connect(self.fun)
        self.btn = btn
        pass

    def fun(self):
        color = QColor(30,40,50)
        color_dialog =QColorDialog(color,self)
        color_dialog.colorSelected.connect(self.change_color)
        color_dialog.show()

    def change_color(self,color):
        palette = QPalette()
        palette.setColor(QPalette.Background,color)
        self.setPalette(palette)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
show方法弹出改变背景颜色

 而open()是直接传递个槽函数的,并且槽函数是没有参数传递的。只能手动获取。

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()
        self.resize(800,500)


    def UI_test(self):
        btn = QPushButton('color',self)
        btn.move(50,50)
        btn.clicked.connect(self.fun)
        self.btn = btn
        pass

    def fun(self):
        color = QColor(30,40,50)
        color_dialog =QColorDialog(color,self)
        color_dialog.colorSelected.connect(self.change_color)
        # color_dialog.show()
        color_dialog.open(self.change_color)
        self.col_dia = color_dialog

    def change_color(self):
        palette = QPalette()
        palette.setColor(QPalette.Background,self.col_dia.selectedColor())  #直接获取颜色值
        self.setPalette(palette)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
open方式弹出改变背景色

exec是有个返回值的,只有点击确认键返回值为1。可以利用这个值来执行相对应的操作。

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()
        self.resize(800,500)


    def UI_test(self):
        btn = QPushButton('color',self)
        btn.move(50,50)
        btn.clicked.connect(self.fun)
        self.btn = btn
        pass

    def fun(self):
        color = QColor(30,40,50)
        color_dialog =QColorDialog(color,self)
        color_dialog.colorSelected.connect(self.change_color)
        # color_dialog.show()
        self.col_dia = color_dialog
        if self.col_dia.exec():     #利用exec的返回值
            self.change_color()
    def change_color(self):
        palette = QPalette()
        palette.setColor(QPalette.Background,self.col_dia.selectedColor())  #直接获取颜色值
        self.setPalette(palette)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
exec方式弹出并改变北京市

  3.选项控制

QColorDialog.setOption(self, option: 'QColorDialog.ColorDialogOption', on: bool = ...)
QColorDialog.setOptions(self, options: typing.Union['QColorDialog.ColorDialogOptions', 'QColorDialog.ColorDialogOption'])
QColorDialog.testOption(self, option: 'QColorDialog.ColorDialogOption')    #——>bool
# type: 'QColorDialog.ColorDialogOption'
ShowAlphaChannel        # 允许选择Alpha分量(透明度)
NoButtons               # 取消确认、取消按钮
DontUseNativeDialog     # 不使用原生色彩对话框而选用Qt的标准色彩对话框

其中NoButtons的选项常常结合当前色彩改变来实时作用改变颜色

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()
        self.resize(800,500)


    def UI_test(self):
        btn = QPushButton('color',self)
        btn.move(50,50)
        btn.clicked.connect(self.fun)
        self.btn = btn
        pass

    def fun(self):
        color = QColor(30,40,50)
        color_dialog =QColorDialog(color,self)
        color_dialog.colorSelected.connect(self.change_color)
        color_dialog.setOptions(QColorDialog.NoButtons | QColorDialog.ShowAlphaChannel)  #取消按钮,开启透明度
        color_dialog.currentColorChanged.connect(self.change_color)      #当前颜色发生变化
        self.col_dia = color_dialog
        color_dialog.show()

    def change_color(self,col):
        palette = QPalette()
        palette.setColor(QPalette.Background,col)
        self.setPalette(palette)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
实时改变背景色

  4.静态方法

  首先有个概念:标准颜色和自定义颜色。标准颜色是对话框提供的颜色(Basic Colors),而自定义颜色就是下面的用户定义的颜色(Custom Colors)。

自定义颜色一共用18组可以使用。顺序是从左上开使为0,0下面的是1,右边的是2。

QColorDialog.setCustomColor(index: int,color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, QtGui.QGradient])           #设定自定义颜色
QColorDialog.setStandardColor(index: int, color: typing.Union[QtGui.QColor, QtCore.Qt.GlobalColor, QtGui.QGradient])        #设定标准颜色

这两段代码是指定颜色格子里的颜色的,要注意的是自定义颜色必须是在对控件进行实例化以前定义

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()


    def UI_test(self):
        QColorDialog.setCustomColor(1,QColor(50,60,70))
        cd = QColorDialog(self)
        cd.show()

        pass
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
设定自定义颜色

 运行一下,可以发现自定义颜色位置1已经有了一个自定义颜色

还有一个静态方法是获取颜色

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()

    def UI_test(self):
        btn = QPushButton('test',self)
        btn.clicked.connect(self.color_change)
        pass

    def color_change(self):
        color = QColorDialog.getColor(QColor(50,50,30),self,title='选择颜色')     #获取颜色
        palete = QPalette()
        palete.setColor(QPalette.Background,color)
        self.setPalette(palete)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
View Code

注意一点,如果点击对话框的OK按钮可以改变当前的背景色,但是如果点击了Cancel为什么就变成黑的了?因为我们是在按钮的槽函数里定义的QColorDialog,那么每次点击按钮都会创建一个新的对话框,并且和当前的显示状态是没关系的,所以当点击了Cancel就改成默认的黑色了。

三.常用信号

  和字体对话框的常用信号差不多。

QColorDialog.colorSelected()            #颜色选择
QColorDialog.currentColorChanged()      #当前颜色变化

  用法和字体对话框也类似。我们直接放个案例就可以了

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()

    def UI_test(self):
        self.cd = QColorDialog(self)
        btn = QPushButton('test',self)
        btn.clicked.connect(lambda :self.cd.show())
        self.cd.colorSelected.connect(self.color_change)   #传递参数:color
        pass

    def color_change(self,color):
        palete = QPalette()
        palete.setColor(QPalette.Background,color)
        self.setPalette(palete)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
colorSelected案例
from PyQt5.Qt import *
import sys

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.UI_test()

    def UI_test(self):
        self.cd = QColorDialog(self)
        self.cd.setOptions(QColorDialog.NoButtons)   #一般当前颜色变化是用作展示的,可以不用按钮
        btn = QPushButton('test',self)
        btn.clicked.connect(lambda :self.cd.show())
        self.cd.currentColorChanged.connect(self.color_change)
        pass

    def color_change(self,color):
        palete = QPalette()
        palete.setColor(QPalette.Background,color)
        self.setPalette(palete)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())
currentColorChanged案例

 

posted @ 2019-07-22 23:46  银色的音色  阅读(1164)  评论(0编辑  收藏  举报