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