背景
PyQt是Qt界面库在Python下的绑定库,为熟悉或喜欢Qt的开发者在Python语言下编写GUI界面程序提供了极大的便利,关于自定义控件前面已经给出了两个例子,分别是自定义颜色指示框控件和自定义导航栏控件,这次给出一个在Python语言中使用PyQt库自定义圆形指示灯控件的例子。
自定义圆形指示灯控件例子说明
先看一下调用该圆形指示灯控件时运行界面的样子,如下图所示:
上图中,左侧部分包括了:设置圆形指示灯控件的各种属性,如设置颜色、半径等信息;恢复默认属性设置;启动/暂停跑马灯效果等。右侧上半部分是自定义的单个圆形指示灯控件,右侧下半部分使用了八个指示灯控件,用以模拟跑马灯的效果。该圆形指示灯控件具有如下特点:
(1) 自适应窗口大小;
(2) 可单独对各种属性如颜色、半径等进行设置;
(3) 对每个属性提供了默认值
代码实现过程
根据上面的特点,在PyQt中实现了一个基于QAbstractButton的圆形指示灯控件类——MyLed,下面逐步说明主要的代码实现方法。
1、类初始化代码
这部分主要设置圆形指示灯控件属性的初始值,设置最小大小尺寸等,主要代码如下图所示:
这儿在类中定义了一个“_attributes”字典变量(可理解为私有变量),里面存储了该控件的所有属性及初始值,使用字典的update()函数,将其更新到self.attributes成员变量中,这样做的好处是可以随时使用update()函数将控件的属性恢复到默认设置。
2、类方法(成员函数)代码
主要包括两个函数,“setLedDefaultOption”和“setLedOption”,前者将所有属性设置为默认值,后者设置单个属性值,主要代码如下图所示:
需要说明的是,对控件属性进行修改后,要及时调用update()函数,以强制使控件进行外观刷新。
3、重定义paintEvent事件
这是实现圆形指示灯控件外观的主要代码,定义了控件在不同状态(真、假状态)、不同属性值下的外观,主要代码如下图所示:
这段代码中有详细的注释,主要包括画边框外圈、边框内圈及画内圆等操作,为呈现立体感,简单的使用了辐射渐变画刷QRadialGradient类。
备注
调用上面的圆形指示灯控件类,将其放到主窗口中,即可看到本文开头的运行界面。测试代码例子较长,难度不大,调用该类的成员函数,可在界面上对各个属性值分别进行设置,大家可自行实现。
在模拟真实指示灯外观方面,本例只是粗略的使用了辐射渐变画刷,大家可以在paintEvent事件中修改相关代码,实现更真实的外观。另外,在这个例子的基础上也可进一步改进,如实现方形指示灯或其它形状外观的指示灯控件。
欢迎加关注,共同交流。
领取专属 10元无门槛券
私享最新 技术干货