问题提出
在软件GUI界面设计中,经常需要使用颜色选择及指示的控件。在PyQt中,定义如下形式的控件,要求:
(1)控件的外观显示当前选中的颜色
(2)单击该控件能弹出颜色选择框选择新的颜色
(3)在弹出的颜色选择框中显示的初始颜色是控件上次的颜色
下图演示了该自定义控件的典型使用界面,在该图中使用了6个颜色控件来设置软件中其它控件的颜色属性值:
解决方法
实现上图所示自定义颜色指示选择框控件,主要需要考虑以下几个方面:
(1)自定义控件的基类为QFrame且风格设为:QFrame.Panel | QFrame.Sunken
(2)自定义控件的自动填充背景属性设为真
(3)更改自定义控件的外观颜色使用函数:setPalette(color)
(4)重写鼠标单击事件函数mousePressEvent,在该事件中处理新颜色的选择及通知主程序颜色已经改变了。
其中,在第4条中,弹出颜色选择框,使用QColorDialog类的getColor函数选择新的颜色,在该函数中初始颜色值设为上次控件的颜色值,即self.palette().color(QPalette.Window),通过自定义信号sigColorChanged(定义为pyqtSignal(QColor))将新颜色值发送到调用该控件的主程序。
实现代码
结合上面的思路,Python中该自定义控件的类实现代码如下图所示:
在主程序中,调用上面的类即可实现一个自定义的颜色指示选择框控件。
欢迎加关注,共同交流。