今天要讲的是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_())

注意一点,如果点击对话框的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案例

GUI学习之二十六——QColorDialog学习总结的更多相关文章

  1. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  2. 深度学习(二十六)Network In Network学习笔记

    深度学习(二十六)Network In Network学习笔记 Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/deta ...

  3. Java基础学习笔记二十六 JDBC

    什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库,J ...

  4. Python学习(二十六)—— Django基础一

    转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...

  5. javaweb学习总结(二十六)——jsp简单标签标签库开发(二)

    一.JspFragment类介绍 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段, ...

  6. GUI学习之二十九—QFileDialog学习总结

    今天学习的是文件对话框——QFileDialog 一.描述 QFileDialog提供了一个对话框,允许用户选择文件或者目录,也允许用户遍历文件系统,用以选择一个或多个文件或者目录. QFileDia ...

  7. GUI学习之二十五——QFontDialog学习总结

    今天学习字体对话框——QFontDialog()控件. QFontDialog()是继承自QDialog()的一个子类,用来选择给定的字体(包括字体.字号.样式等) 一.构造函数 QFontDialo ...

  8. GUI学习之二十四——QDialog学习总结

    今天学习对话框输入控件的基类(QDialog). 一.描述 是对话类窗口(字体框.颜色选择.文件选择框等)的基类. 对话框窗口是顶级窗口(就是说不包含于哪个父类的显示界面里),主要用于短期任务和与用户 ...

  9. java web学习总结(二十六) -------------------JSP属性范围

    所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...

随机推荐

  1. spring boot shiro redis整合基于角色和权限的安全管理-Java编程

    一.概述 本博客主要讲解spring boot整合Apache的shiro框架,实现基于角色的安全访问控制或者基于权限的访问安全控制,其中还使用到分布式缓存redis进行用户认证信息的缓存,减少数据库 ...

  2. iptables添加、删除端口

    简洁才是王道, 下面是添加一个udp端口,端口号8566,即接收到8566端口的所有udp包 /sbin/iptables -I INPUT -p udp --dport -j ACCEPT 要删除这 ...

  3. leetcode-mid-math-202. Happy Number-NO

    mycode 关键不知道怎么退出循环.............其实只要有一个平方和以前出现过,那么整个计算过程就会重复 参考: class Solution(object): def isHappy( ...

  4. 【Spring】---【AOP】

    转发几篇文章 专治不会看源码的毛病--spring源码解析AOP篇 Spring3:AOP 理解AOP 什么是AOP? 转自: http://www.cnblogs.com/xiexj/p/73668 ...

  5. Double类型的数值 在写入excel时 如何去掉 科学计算法的 后面数值+ E的 情况

    Double start = 20190724100000.000; 写入excel时 是 201907E+13 但想要输出的是 20190724100000 这种格式 Java在java.math包 ...

  6. Scrapy输出文件格式问题汇总

    Q:Scrapy抓取的内容(包含中文)输出到JSON Lines文件时如何确保输出的是字符本身而不是其unicode编码? A:默认的JsonLinesItemExporter其ensure_asci ...

  7. vue组件注册(极客时间Vue视频笔记)

    vue组件注册 组件是为了方便代码复用,只需引入组件即可在不同的地方使用想同的功能代码 <body> <div class="app"> <todo- ...

  8. C++ vector、list和deque的区别 (整理)

    1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变.因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内 ...

  9. [Git] 019 merge 命令的补充

    回顾:[Git] 017 加一条分支,享双倍快乐 的 "2.3" 1. "Fast-forward" "Git" 在合并分支时会尽可能地使用 ...

  10. 函数 FUNCTION

    函数 FUNCTION 定义: 带名字的代码块,用于执行具体任务. 注意: 应给函数指定描述性名称,只是用小写字母和下划线. 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何 ...