今天要讲的是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. 2017年广东省ACM省赛(GDCPC-2017)总结

    今年第一次参加省赛(也是第一次参加这类比赛),既有点惊喜又有点紧张,前一晚没有怎么睡好,有点怕今年打铁,虽然说大一打铁也说的过去,可是谁也不想打铁. 一开始比赛的时候我一开始没有去看题,而是把我们队的 ...

  2. webpack中的 chunk,module,bundle的区别,以及hidden modules是什么

    hidden modules是什么: chunk,module,bundle的区别 总结: module是指任意的文件模块,等价于commonjs中的模块 chunks是webpack处理过程中被分组 ...

  3. Debian系列Linux的隐藏WiFi

    Debian系列Linux共用相同的deb安装包,拥有大量的各种软件,是Linux里面最主要的生态系.包括Ubuntu及其衍生版本如Lubuntu/Mate/Kubuntu等,在ARM上也有很好的支持 ...

  4. ubuntu 环境配置

    安装包准备 下载 410以上显卡驱动 文件名: NVIDIA-Linux-x86_64-410.66.run 下载 cuda 10.0 选择 CUDA Toolkit 10.0 (Sept 2018) ...

  5. idea把java web项目打成war包

    1.新建artifacts 2.设置你的目录内容路径 3.找到项目web或webapp的路径 4.可以直接添加已经跑通的项目 5.配置完成点OK 6.编译打成war包 7.点击编译结束打完收工 8.找 ...

  6. mysql驱动表与被驱动表及join优化

    驱动表与被驱动表 先了解在join连接时哪个表是驱动表,哪个表是被驱动表:1.当使用left join时,左表是驱动表,右表是被驱动表2.当使用right join时,右表时驱动表,左表是驱动表3.当 ...

  7. JDK11 | 第六篇 : Epsilon 垃圾收集器

    文章首发于公众号<程序员果果> 地址 : https://mp.weixin.qq.com/s/RhGXJImhp7Xm-wDrpPomkQ 一.简介 Epsilon(A No-Op Ga ...

  8. vue vuex应用

    vue结构图: vuex为vue的一个插件,用来管理共享数据的,局部数据声明在自己组件内部. 没有使用vuex时,所有共享数据和操作数据的方法都声明在父组件内,数据的通信用props及pubsub等. ...

  9. arm链接脚本

    一. 为什么需要链接脚本 1.1. 从源码到可执行程序(主要有三个步骤:预编译.编译.链接) 1.1.1. 预编译 a. 预编译器执行.譬如C中的宏定义就是由预编译器处理,注释等也是由预编译器处理的. ...

  10. [Codeforces 1246B] Power Products (STL+分解质因数)

    [Codeforces 1246B] Power Products (STL+分解质因数) 题面 给出一个长度为\(n\)的序列\(a_i\)和常数k,求有多少个数对\((i,j)\)满足\(a_i ...