python编程定义圆_Python语言编程系列014——PyQt中自定义圆形指示灯
背景
PyQt是Qt界面庫(kù)在Python下的綁定庫(kù),為熟悉或喜歡Qt的開發(fā)者在Python語(yǔ)言下編寫GUI界面程序提供了極大的便利,關(guān)于自定義控件前面已經(jīng)給出了兩個(gè)例子,分別是自定義顏色指示框控件和自定義導(dǎo)航欄控件,這次給出一個(gè)在Python語(yǔ)言中使用PyQt庫(kù)自定義圓形指示燈控件的例子。
自定義圓形指示燈控件例子說(shuō)明
先看一下調(diào)用該圓形指示燈控件時(shí)運(yùn)行界面的樣子,如下圖所示:
上圖中,左側(cè)部分包括了:設(shè)置圓形指示燈控件的各種屬性,如設(shè)置顏色、半徑等信息;恢復(fù)默認(rèn)屬性設(shè)置;啟動(dòng)/暫停跑馬燈效果等。右側(cè)上半部分是自定義的單個(gè)圓形指示燈控件,右側(cè)下半部分使用了八個(gè)指示燈控件,用以模擬跑馬燈的效果。該圓形指示燈控件具有如下特點(diǎn):
(1) 自適應(yīng)窗口大小;
(2) 可單獨(dú)對(duì)各種屬性如顏色、半徑等進(jìn)行設(shè)置;
(3) 對(duì)每個(gè)屬性提供了默認(rèn)值
代碼實(shí)現(xiàn)過(guò)程
根據(jù)上面的特點(diǎn),在PyQt中實(shí)現(xiàn)了一個(gè)基于QAbstractButton的圓形指示燈控件類——MyLed,下面逐步說(shuō)明主要的代碼實(shí)現(xiàn)方法。
1、類初始化代碼
這部分主要設(shè)置圓形指示燈控件屬性的初始值,設(shè)置最小大小尺寸等,主要代碼如下圖所示:
這兒在類中定義了一個(gè)“_attributes”字典變量(可理解為私有變量),里面存儲(chǔ)了該控件的所有屬性及初始值,使用字典的update()函數(shù),將其更新到self.attributes成員變量中,這樣做的好處是可以隨時(shí)使用update()函數(shù)將控件的屬性恢復(fù)到默認(rèn)設(shè)置。
2、類方法(成員函數(shù))代碼
主要包括兩個(gè)函數(shù),“setLedDefaultOption”和“setLedOption”,前者將所有屬性設(shè)置為默認(rèn)值,后者設(shè)置單個(gè)屬性值,主要代碼如下圖所示:
需要說(shuō)明的是,對(duì)控件屬性進(jìn)行修改后,要及時(shí)調(diào)用update()函數(shù),以強(qiáng)制使控件進(jìn)行外觀刷新。
3、重定義paintEvent事件
這是實(shí)現(xiàn)圓形指示燈控件外觀的主要代碼,定義了控件在不同狀態(tài)(真、假狀態(tài))、不同屬性值下的外觀,主要代碼如下圖所示:
這段代碼中有詳細(xì)的注釋,主要包括畫邊框外圈、邊框內(nèi)圈及畫內(nèi)圓等操作,為呈現(xiàn)立體感,簡(jiǎn)單的使用了輻射漸變畫刷QRadialGradient類。
備注
調(diào)用上面的圓形指示燈控件類,將其放到主窗口中,即可看到本文開頭的運(yùn)行界面。測(cè)試代碼例子較長(zhǎng),難度不大,調(diào)用該類的成員函數(shù),可在界面上對(duì)各個(gè)屬性值分別進(jìn)行設(shè)置,大家可自行實(shí)現(xiàn)。
在模擬真實(shí)指示燈外觀方面,本例只是粗略的使用了輻射漸變畫刷,大家可以在paintEvent事件中修改相關(guān)代碼,實(shí)現(xiàn)更真實(shí)的外觀。另外,在這個(gè)例子的基礎(chǔ)上也可進(jìn)一步改進(jìn),如實(shí)現(xiàn)方形指示燈或其它形狀外觀的指示燈控件。
歡迎加關(guān)注,共同交流。
總結(jié)
以上是生活随笔為你收集整理的python编程定义圆_Python语言编程系列014——PyQt中自定义圆形指示灯的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python语言需要变量生明吗_pyth
- 下一篇: unity fixedupdate_un