zoukankan      html  css  js  c++  java
  • 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案例
  • 相关阅读:
    同步和异步Http请求工具类通过get和post方式发送请求
    c# IPC实现本机进程之间的通信
    C# 建立window服务
    WPF 将控件绑定到变量
    WPF触发器的使用
    C# DataTable 和List之间相互转换的方法
    WPF自适应窗体实现小结
    WPF简单导航框架(Window与Page互相调用)
    JavaEE框架面试题
    快速排序
  • 原文地址:https://www.cnblogs.com/yinsedeyinse/p/11135429.html
Copyright © 2011-2022 走看看