首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python语言编程系列014——PyQt中自定义圆形指示灯

背景

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事件中修改相关代码,实现更真实的外观。另外,在这个例子的基础上也可进一步改进,如实现方形指示灯或其它形状外观的指示灯控件。

欢迎加关注,共同交流。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180925A0W9IU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券