PyQt 不規則窗體的實現之一

2022-03-27 20:08:20 字數 3620 閱讀 4779

知識點

pyqt一般實現的窗體就是當前作業系統原生窗體的樣式,ubuntu下的窗體還不錯,window下的就難看了,雖然平時應用程式關心的往往是業務和功能,但是偶爾我們也需要製作一些個性的窗體樣式,如qq、360、千千靜聽等,這種漂亮個性的窗體,很能吸引大眾的眼球。

實現不規則窗體,我採用繼承qwidget這個部件基類並重繪之,有幾個知識點:

- 重寫paintevent事件,可以繪製窗體的背景

- 呼叫setmask方法設定窗體的遮罩層,可以個性化窗體,掩碼黑色部分即是要顯示的,白色即是要隱藏的

- 要理解qpixmap和qbitmap的區別,qbitmap是qpixmap的子類別,提供單色影象

區別qpixmap和qbitmap的小例項

- 素材:1.png

- 例項**

from pyqt4.qtgui import *

from pyqt4.qtcore import *

class myform(qwidget):

def __init__(self,parent=none):

super(myform,self).__init__(parent)

def paintevent(self,event):

painter = qpainter(self)

painter.drawpixmap(0,0,280,390,qpixmap("1.png"))

painter.drawpixmap(300,0,280,390,qbitmap("1.png"))

form = myform()

form.show()

- 執行效果

不規則窗體的小例項

- 例項**:繼續使用1.png

from pyqt4.qtgui import *

from pyqt4.qtcore import *

class myform(qwidget):

def __init__(self,parent=none):

super(myform,self).__init__(parent)

self.pix = qpixmap("1.png")

self.resize(self.pix.size())

self.setmask(self.pix.mask())

def paintevent(self,event):

painter = qpainter(self)

painter.drawpixmap(0,0,self.pix.width(),self.pix.height(),self.pix)

form = myform()

form.show()

- 執行結果

不是小結

上述只是實現不規則窗體的最簡單的方式,素材即當遮罩層又當背景圖,更靈活的方法是使用一張遮罩層,來控制窗體的大小,然後在利用paintevent方法中重繪其背景圖等。

不規則窗體的小例項

- 素材:2.png、3.jpg

- 測試**

- 執行結果

不是小結

上述採用遮罩層的方式,其實還是不靈活,當窗體發生變化的時候,這種方式顯示得很不靈活。可以採用qpainter類的繪圖方法來動態生成乙個遮罩層qpixmap或qbitmap物件,既一張黑白,處理一下相應的圓角角度即可。

不規則窗體的小例項

- 例項**:繼續使用3.jpg

- 執行結果

小結本篇簡單呈現了不規則窗體的幾個小應用,淺顯易懂,後續章節需要考慮的問題:

- 因重繪窗體後,窗體因隱藏了邊框、標題欄,導致窗體不能移動、放大、縮小、拖拽

- 圓角問題,利用drawroundrect繪製的圓角相比直接用遮罩層的圓角,不夠圓滑,即使設定相關抗鋸齒引數,也不夠理想,我分析了下360、qq、迅雷的圓角,有一點心得

- 窗體拖拽時,窗體瞬移問題,可以觀察一下qvod軟體的拖拽問題

以上幾點將在後續章節闡述分析,如果我的blog有什麼技術錯誤,請及時反饋給我。這些學習筆記,希望能給愛好者和新人們一些幫助,晚安!

PyQt5不規則窗體

直接這麼寫有坑 mask img qimage mask filename self.setmask qbitmap mask img 核心在於self.setmask self.pix.mask 打個廣告 程式設計代做,有需要的可以聯絡,qq1692303843 全部 如下 import sys ...

VC 不規則窗體的實現(一)

不規則窗體多用於程式啟動視窗,要實現不規則窗體,背景一般都會採用貼圖的方式,格式首先肯定是png格式了。1 gdi 資源初始化 庫宣告 include using namespace gdiplus ulong ptr gdiplustoken gdiplusstartupinput gdiplus...

QT實現不規則窗體

看到網上有很多不規則窗體的實現,效果很酷.於是使用qt也實現了乙個,qt的不規則窗體實現非常簡單,只需要設定乙個mask 遮掩 這個的格式可以使用png或bmp格式,我使用了png格式,預設窗體是矩形的,使用png影象,將需要隔離在窗體之外的區域的畫素設定為白色或透明色,其他顏色的區域對應顯示出來的...