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_())
注意一点,如果点击对话框的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学习总结的更多相关文章
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- 深度学习(二十六)Network In Network学习笔记
深度学习(二十六)Network In Network学习笔记 Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/deta ...
- Java基础学习笔记二十六 JDBC
什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库,J ...
- Python学习(二十六)—— Django基础一
转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...
- javaweb学习总结(二十六)——jsp简单标签标签库开发(二)
一.JspFragment类介绍 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段, ...
- GUI学习之二十九—QFileDialog学习总结
今天学习的是文件对话框——QFileDialog 一.描述 QFileDialog提供了一个对话框,允许用户选择文件或者目录,也允许用户遍历文件系统,用以选择一个或多个文件或者目录. QFileDia ...
- GUI学习之二十五——QFontDialog学习总结
今天学习字体对话框——QFontDialog()控件. QFontDialog()是继承自QDialog()的一个子类,用来选择给定的字体(包括字体.字号.样式等) 一.构造函数 QFontDialo ...
- GUI学习之二十四——QDialog学习总结
今天学习对话框输入控件的基类(QDialog). 一.描述 是对话类窗口(字体框.颜色选择.文件选择框等)的基类. 对话框窗口是顶级窗口(就是说不包含于哪个父类的显示界面里),主要用于短期任务和与用户 ...
- java web学习总结(二十六) -------------------JSP属性范围
所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
随机推荐
- XDebug安装配置教程
笔者的开发环境如下:Windows8.1+Apache+PhpStorm+XDebug+Firefox(XDebug helper 1.4.3插件). 转载http://www.jb51.net/ar ...
- 微信小程序 API 界面 (2)
由于每个 API 参数:对象的属性都有 success,fail,complete,所以在这个提前介绍,就不再每个API 上写了 success:类型 函数 接口调用成功的回调函数 fail:类型 函 ...
- 【Win32 API】远程工具调用
前言 有时候,影城报障需要远程过去重现和处理,如果电脑没有安装远程工具的话,还需要营业员下载和安装,然后将账号密码发送过来,这样一来一回操作繁琐也浪费时间,所以我们可以设想一下这种场景,售票员点击在p ...
- java 栈和栈帧
文章转载自:http://www.tuicool.com/articles/URZrMnb jvm为每个新创建的线程都分配一个堆栈.堆栈以帧为单位保存线程的状态.jvm对堆栈只进行两种操作:以帧为单位 ...
- leetcode-easy-array-217. Contains Duplicate
mycode 76.39% class Solution(object): def containsDuplicate(self, nums): """ :type n ...
- Nova 的高性能虚拟机支撑
目录 目录 CPU 计算平台体系架构 SMP 架构 NUMA 结构 MMP 结构 Nova 的高性能虚拟机 Nova 虚拟机 CPU/RAM 设计的背景 操作系统许可(Licensing) 性能(Pe ...
- 阶段3 1.Mybatis_09.Mybatis的多表操作_1 mybatis表之间关系分析
4.mybatis中的多表查询 表之间的关系有几种: 一对多 多对一 一对一 多对多 举例: 用户和订单 ...
- Selenium学习之==>WebDriver驱动对照表
转自www.imdsx.cn 1.Chrome 对于chrome浏览器,有时候会有闪退的情况,也许是版本冲突的问题,我们要对照着这个表来对照查看是不是webdriver和chrome版本不对. chr ...
- JS 数组的常用方法详解归纳之改变原数组方法
shift() 把数组的第一个元素从其中删除,并返回第一个元素的值, 如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值.请注意,该方法不创建新数组,而是直接修改 ...
- python面试题--初级(一)
一. Python 中有多少种运算符? 这类面试问题可以判断你的 Python 功底,可以举一些实例来回答这类问题. 在 Python 中我们有 7 中运算符: 算术运算符.关系 (比较) 运算符.赋 ...