中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python編程如何使用PyQt5庫實現動態水波進度條

發布時間:2021-10-09 09:07:24 來源:億速云 閱讀:137 作者:iii 欄目:開發技術

這篇文章主要介紹“Python編程如何使用PyQt5庫實現動態水波進度條”,在日常操作中,相信很多人在Python編程如何使用PyQt5庫實現動態水波進度條問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python編程如何使用PyQt5庫實現動態水波進度條”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

目錄
  • 原理介紹

  • 代碼實操

原理介紹

如果仔細觀察的話,靜態圖效果的呈現在于先后的兩個線條的繪制,產生水波的主要是由于兩線條的左右的水平錯位 以及 設置的透明度不同 所造成的;

想要形成最后的水波蕩漾的視覺效果,只需要把數張線條連續走向的靜態圖拼接在一起就能達到

線條中的波浪效果,這里用到的是 正弦函數的走向,教程代碼中的兩根線條主要借助于

y = Asin(wx+l)+k 函數 繪制

y = Asin(wx+l)+k 函數中

兩個線條就能實現交叉起伏的效果,是因為兩正弦函數中設置的 l 值不一樣 ,

基本原理講解完了,下面就是代碼實現部分,圖像呈現效果是由 Qt中的 QPellete(畫板) 實現,圖像中的線條區域主要用到了 QPainterPath() 函數,函數可以借助繪制的線條圍城一個區域

動態圖效果的實現主要是在代碼中加入了一個 startTimer() 函數,起到計時器效果:每隔一定的時間就會更新一次界面(所得到的靜態圖也不一樣,這個靜態圖的視覺差實現動態效果);

而圖像中百分比自動填充是由于在頁面更新的時候,同時進度加一;

代碼實操

函數初始化 : 定義背景顏色、進度條顏色、進度條起始進度及頁面刷新時間等

self.resize(200,60)
        self.layout = QGridLayout(self)
        #背景填充灰色
        self.setAutoFillBackground(True)
        p  = QPalette()
        p.setColor(QPalette.Background,Qt.gray)
        self.setPalette(p)
        #設置進度條顏色
        self.bg_color = QColor(255, 0, 0)
        #設置界面刷新時間
        self.startTimer(80)
        self.m_waterOffset = 0.05
        self.m_offset = 50
        self.m_borderwidth = 10
        #進度條進度范圍0-100
        self.per_num = 0

painEvent 函數主要完成水波效果和進度條文本的繪制,也是效果繪制的核心

def paintEvent(self, event):
        # 鋸齒狀繪畫板;
        painter = QPainter()
        painter.setRenderHint(QPainter.Antialiasing)
        painter.begin(self)
        #獲取窗口的寬度和高度
        width,height = self.width(),self.height()
        percentage = 1 - self.per_num/100
        # 水波走向:正弦函數 y = A(wx+l) + k
        # w 表示 周期,值越大密度越大
        w = 2 * math.pi / (width)
        # A 表示振幅 ,理解為水波的上下振幅
        A = height * self.m_waterOffset
        # k 表示 y 的偏移量,可理解為進度
        k = height *percentage
        water1 = QPainterPath()
        water2 = QPainterPath()
        #起始點
        water1.moveTo(5,height)
        water2.moveTo(5,height)
        self.m_offset += 0.6
       if(self.m_offset >(width/2)):
            self.m_offset = 0
        i = 5
        while(i < width-5):
            waterY1 = A*math.sin(w*i +self.m_offset ) + k
            waterY2 = A*math.sin(w*i + self.m_offset + width/2*w) + k
            water1.lineTo(i, waterY1)
            water2.lineTo(i, waterY2)
            i += 1
        water1.lineTo(width-5,height)
        water2.lineTo(width-5,height)
        totalpath = QPainterPath()
        totalpath.addRect(QRectF(5, 5, self.width() - 10, self.height() - 10))
        painter.setBrush(Qt.gray)
        painter.drawRect(self.rect())
        painter.save()
        painter.setPen(Qt.NoPen)
        #設置水波的透明度
        watercolor1 =QColor(self.bg_color)
        watercolor1.setAlpha(100)
        watercolor2 = QColor(self.bg_color)
        watercolor2.setAlpha(150)
        path = totalpath.intersected(water1)
        painter.setBrush(watercolor1)
        painter.drawPath(path)
        path = totalpath.intersected(water2)
        painter.setBrush(watercolor2)
        painter.drawPath(path)
        painter.restore()

        '''繪制字體'''
        m_font = QFont()
        m_font.setFamily('Microsoft YaHei')
        m_font.setPixelSize(int(self.width()/10))
        painter.setPen(Qt.white)
        painter.setFont(m_font)
        painter.drawText(self.rect(),Qt.AlignCenter,"{}%".format(self.per_num))
        painter.end()

實現進度條進度自動增加功能,同時界面實時更新達到動態效果

def timerEvent(self, event):
        self.per_num +=1
        if self.per_num ==101:
            self.per_num = 0
        self.update()

到此,關于“Python編程如何使用PyQt5庫實現動態水波進度條”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沙湾县| 沙坪坝区| 正镶白旗| 大余县| 盐边县| 新泰市| 凌海市| 廉江市| 滦南县| 通城县| 荃湾区| 齐河县| 渭南市| 健康| 峡江县| 贵州省| 原平市| 衡阳县| 鹤峰县| 上思县| 炎陵县| 利津县| 铜陵市| 来安县| 辽源市| 玛多县| 湘潭市| 农安县| 青龙| 广饶县| 广河县| 红原县| 双辽市| 西安市| 砀山县| 卓尼县| 阜阳市| 柘城县| 芒康县| 内丘县| 乾安县|