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中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...
随机推荐
- LeetCode_1116.打印零与奇偶数(多线程)
LeetCode_1116 LeetCode-1116.打印零与奇偶数 假设有这么一个类: class ZeroEvenOdd { public ZeroEvenOdd(int n) { ... } ...
- IntelliJ IDEA2018破解教程
破解方法:下载破解补丁→修改配置文件→输入激活码→激活成功 由于JetBrains封杀,大部分激活服务器已经不能使用,使用下面的比较麻烦的方法也可以进行破解,但是有效期是到2100年(emmmm,也算 ...
- Xcode10报错 library not found for -lstdc++ 问题解决
在Xcode9上正常编译的项目,在Xcode10上编译可能会遇到如下错误: library not found for -lstdc++.6.0.9 library not found for -ls ...
- lambda表达式使用解析
1.Predicate/Consumer/Function/Supplier介绍 Predicate boolean test(T t); Consumer accpet(T t); Function ...
- ARTS-0
ARTS的初衷 Algorithm:主要是为了编程训练和学习.每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard).进行编程训练,如果不训练你看再多的算法 ...
- centos7下执行firewall-cmd显示ImportError: No module named 'gi'
centos7 安装tomcat 及问题处理(No module named 'gi')(Job for firewalld.service failed because the control) 2 ...
- 20191127 Spring Boot官方文档学习(6-8)
6.部署Spring Boot应用程序 在部署应用程序时,Spring Boot的灵活打包选项提供了很多选择.您可以将Spring Boot应用程序部署到各种云平台,容器映像(例如Docker)或虚拟 ...
- 面试题:线程A打印1-10数字,打印到第5个数字时,通知线程B
此题考查的是线程间的通信方式. 可以利用park/unpark实现 可以利用volatile关键字实现 可以利用synchronized结合wait notify实现 可以利用JUC中的CountDo ...
- 【Linux-设备树】编译器DTC
DTC编译器:设备树源码DTS文件编译为二进制文件DTB. DTC编译器的作用:就是对设备树的源码的文件进行语法检查,根据linux的内核要求检查各个节点以及属性,将设备树源码编译生成二进制文件,以保 ...
- [19/05/27-星期一] JavaScript_ 条件语句(if语句)和循环语句(while 、for、do-while)
一.条件语句 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...