1、QColorDialog:颜色选择对话框,都是通过构造函数构造出相关的对象。
构造函数:
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QColorDialog的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
cd = QColorDialog(QColor(100, 200, 150), self)
cd.setWindowTitle("选择一个好看的颜色")
cd.show()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
window.show()
sys.exit(app.exec_())
2、功能作用:
①打开对话框:
调用show()如何获得用户所选择的对象:进入该函数,发现并无返回值,所以只能使用其他信号解决该问题。
选中一个颜色设置为背景:用show方法时
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QColorDialog的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
# 修改控件的背景颜色,会影响控件内部的子控件
# self.setStyleSheet("backcolor:red")
# self.setStyleSheet("backcolor:rgb(100, 200, 150)")
cd = QColorDialog(QColor(100, 200, 150), self)
cd.setWindowTitle("选择一个好看的颜色")
def color(col):
# 使用调色板对象
palette = QPalette()
palette.setColor(QPalette.Background, col)
self.setPalette(palette)
cd.colorSelected.connect(color)
cd.show()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
window.show()
sys.exit(app.exec_())
用open()方法:
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QColorDialog的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
cd = QColorDialog(QColor(100, 200, 150), self)
cd.setWindowTitle("选择一个好看的颜色")
def open_color():
palette = QPalette()
palette.setColor(QPalette.Background, cd.selectedColor())
self.setPalette(palette)
cd.open(open_color)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
window.show()
sys.exit(app.exec_())
用exec()方法,会返回1或0结果:
def exec_color():
# 使用调色板对象
palette = QPalette()
palette.setColor(QPalette.Background, cd.selectedColor())
self.setPalette(palette)
if cd.exec():
exec_color()
②选项控制:控制对话框中的样式,不显示确定和取消按钮等,选取α分量。
不显示确定和取消按钮,一般是用来实时显示信息。
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QColorDialog的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
cd = QColorDialog(QColor(100, 200, 150), self)
cd.setWindowTitle("选择一个好看的颜色")
def color(col):
# 使用调色板对象
palette = QPalette()
palette.setColor(QPalette.Background, col)
self.setPalette(palette)
def curr_color():
palette = QPalette()
palette.setColor(QPalette.Background, cd.currentColor())
self.setPalette(palette)
cd.currentColorChanged.connect(curr_color)
cd.setOptions(QColorDialog.NoButtons | QColorDialog.ShowAlphaChannel)
cd.show()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.resize(500, 500)
window.show()
sys.exit(app.exec_())
③静态方法:即调用这些方法是QColorDialog方法调用。
自定义颜色,标准颜色:(上方是标准颜色、下方是自定义颜色),通过相关方法设置对应位置的颜色。也可以通过相关方法获取指定位置的颜色。
customCount()获取自定义颜色的个数(小格子的个数)
setCustomColor()通过指定索引设置颜色。
案例:点击按钮时打印自定义颜色的个数:(验证他是静态方法,通过类名调用)
btn = QPushButton(self)
btn.move(100, 100)
btn.setText("测试按钮")
btn.clicked.connect(lambda: print(QColorDialog.customCount()))
# 或者控件调用也可以
#btn.clicked.connect(lambda: print(cd.customCount()))
根据指定索引设置自定义颜色:(需要在颜色选择对话框创建之前,指定颜色,才会有效)
def setup_ui(self):
# 修改控件的背景颜色,会影响控件内部的子控件
# self.setStyleSheet("backcolor:red")
# self.setStyleSheet("backcolor:rgb(100, 200, 150)")
QColorDialog.setCustomColor(4, QColor(200, 10, 40))
cd = QColorDialog(QColor(100, 200, 150), self)
cd.setWindowTitle("选择一个好看的颜色")
静态方法:阻塞式的静态方法,会有一个返回值根据返回值获取到用户所选择的给定颜色。
获取到用户所显示的颜色:
使用的是静态方法,每次创建的颜色选择对话框都是全新的对象,不存在上次默认选择颜色是哪一个
def test():
color = QColorDialog.getColor(QColor(10, 20, 100), self, "选择颜色")
palette = QPalette()
palette.setColor(QPalette.Background, color)
self.setPalette(palette)
print(color)
btn.clicked.connect(test)
3、QColor信号:
①确定选择某个颜色才会发射的信号,②当前颜色发生改变时才会发射的信号。
def test_():
cd = QColorDialog(self)
cd.setOptions(QColorDialog.NoButtons)
cd.setWindowTitle("选择一个人生的颜色")
def sel_color(color):
palette = QPalette()
palette.setColor(QPalette.ButtonText, color)
btn.setPalette(palette)
# 最终选择颜色确定时所发射的信号
#cd.colorSelected.connect(sel_color)
# 当前颜色发生改变时,所发射的信号
cd.currentColorChanged.connect(sel_color)
cd.show()
btn.clicked.connect(test_)