pyqt5中動畫的使用詳解
一、pyqt5中動畫的繼承關系圖
二、關于QAbstractAnimation父類的認識
1、主要作用
- 繼承此類, 實現(xiàn)一些自定義動畫
- 所有動畫共享的功能
2、功能作用
循環(huán)操作
- setLoopCount(count):設置循環(huán)次數(shù)
- currentLoop():當前循環(huán)
- currentLoopTime():當前循環(huán)時間
時間操作
- duration():單次時長
- totalDuration():動畫總時長
- currentTime():當前時長
動畫方向
- setDirection(QAbstractAnimation.Forward/QAbstractAnimation.Backward)
動畫狀態(tài)state()
- QAbstractAnimation.Stopped:動畫停止
- QAbstractAnimation.Paused:動畫暫停
- QAbstractAnimation.Running:動畫運行
三、QPropertyAnimation屬性動畫的使用
主要用于實現(xiàn)某個屬性值從x到y(tǒng)的動畫變化
1、定義動畫的主要步驟
- 創(chuàng)建一個動畫,并設置目標、屬性
- 設置屬性值的開始、插值、結束
- 動畫時長
- 啟動動畫
2、構造函數(shù)使用方式
1.QPropertyAnimation(parent: QObject = None)
- 設置動畫目標:setTargetObject(self, QObject)
- 設置動畫屬性(位置、大小等):setPropertyName(self, Union[QByteArray, bytes, bytearray])
2.QPropertyAnimation(QObject, Union[QByteArray, bytes, bytearray], parent: QObject = None)
3、常見的屬性
- geometry
- pos
- size
- windowOpacity
4、設置開始值和結束值
- setStartValue(self, Any)
- setEndValue(self, Any)
- setKeyValueAt(self, float, Any)
- setKeyValues(self, object)
5、設置動畫時長
- setDuration(int mesc)
6、啟動動畫
- start()
7、簡單案例(位置的)
import sys from PyQt5.Qt import * class Window(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('動畫') self.resize(500, 500) self.move(400, 200) self.btn = QPushButton(self) self.init_ui() def init_ui(self): self.btn.resize(100, 100) self.btn.move(0, 0) self.btn.setStyleSheet('QPushButton{border: none; background: pink;}') # 1.定義一個動畫 animation = QPropertyAnimation(self) animation.setTargetObject(self.btn) animation.setPropertyName(b'pos') # 使用另外一種構造函數(shù)方式創(chuàng)建 # animation = QPropertyAnimation(self.btn, b'pos', self) # 2.設置屬性值 animation.setStartValue(QPoint(0, 0)) animation.setEndValue(QPoint(400, 400)) # 3.設置時長 animation.setDuration(3000) # 4.啟動動畫 animation.start() if __name__ == "__main__": app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
8、使用插值的動畫
import sys from PyQt5.Qt import * class Window(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('使用插值') self.resize(500, 500) self.move(400, 200) self.btn = QPushButton(self) self.init_ui() def init_ui(self): self.btn.resize(50, 50) self.btn.move(0, 0) self.btn.setStyleSheet('QPushButton{border: none; background: pink;}') # 1.創(chuàng)建動畫 animation = QPropertyAnimation(self.btn, b'pos', self) # 2.定義動畫插值 animation.setKeyValueAt(0, QPoint(0, 0)) animation.setKeyValueAt(0.25, QPoint(450, 0)) animation.setKeyValueAt(0.5, QPoint(450, 450)) animation.setKeyValueAt(0.75, QPoint(0, 450)) animation.setKeyValueAt(1, QPoint(0, 0)) # 3.動畫時長 animation.setDuration(5000) # 4.啟動動畫 animation.start() if __name__ == "__main__": app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
四、QAnimationGroup動畫組的使用
可以將一組動畫, 同時播放或者按順序播放
1、使用的步驟
- 根據(jù)上面的方式創(chuàng)建單獨的動畫(但不啟動)
- 定義一個動畫組
- 將之前的動畫添加到動畫組中
- 啟動動畫組
2、動畫運行幾種狀態(tài)
- 并行動畫QParallelAnimationGroup
- 串行動畫QSequentialAnimationGroup
3、一個動畫組的案例
import sys from PyQt5.Qt import * class Window(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('動畫組') self.resize(500, 500) self.move(400, 200) self.btn1 = QPushButton(self) self.btn2 = QPushButton(self) self.init_ui() def init_ui(self): self.btn1.resize(50, 50) self.btn1.move(0, 0) self.btn1.setStyleSheet('QPushButton{border: none; background: pink;}') self.btn2.resize(50, 50) self.btn2.move(50, 50) self.btn2.setStyleSheet('border: none; background: cyan') # 按鈕1的動畫 animation1 = QPropertyAnimation(self.btn1, b'pos', self) animation1.setKeyValueAt(0, QPoint(0, 0)) animation1.setKeyValueAt(0.25, QPoint(450, 0)) animation1.setKeyValueAt(0.5, QPoint(450, 450)) animation1.setKeyValueAt(0.75, QPoint(0, 450)) animation1.setKeyValueAt(1, QPoint(0, 0)) animation1.setDuration(5000) # animation1.start() # 按鈕2的動畫 animation2 = QPropertyAnimation(self.btn2, b'pos', self) animation2.setKeyValueAt(0, QPoint(50, 50)) animation2.setKeyValueAt(0.25, QPoint(400, 50)) animation2.setKeyValueAt(0.5, QPoint(400, 400)) animation2.setKeyValueAt(0.75, QPoint(50, 400)) animation2.setKeyValueAt(1, QPoint(50, 50)) animation2.setDuration(3000) # animation2.start() animation_group = QSequentialAnimationGroup(self) animation_group.addAnimation(animation1) animation_group.addAnimation(animation2) animation_group.start() if __name__ == "__main__": app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
五、關于QAbstractAnimation中事件的操作
1、啟動動畫start()
2、暫停動畫pause()
3、繼續(xù)啟動動畫resume()
4、停止動畫stop()
5、基本案例
import sys from PyQt5.Qt import * class Window(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('動畫組') self.resize(500, 500) self.move(400, 200) self.btn1 = QPushButton(self) self.btn2 = QPushButton(self) self.init_ui() def init_ui(self): self.btn1.resize(50, 50) self.btn1.move(0, 0) self.btn1.setStyleSheet('QPushButton{border: none; background: pink;}') self.btn2.resize(50, 50) self.btn2.move(50, 50) self.btn2.setStyleSheet('border: none; background: cyan') # 按鈕1的動畫 animation1 = QPropertyAnimation(self.btn1, b'pos', self) animation1.setKeyValueAt(0, QPoint(0, 0)) animation1.setKeyValueAt(0.25, QPoint(450, 0)) animation1.setKeyValueAt(0.5, QPoint(450, 450)) animation1.setKeyValueAt(0.75, QPoint(0, 450)) animation1.setKeyValueAt(1, QPoint(0, 0)) animation1.setDuration(5000) # animation1.start() # 按鈕2的動畫 animation2 = QPropertyAnimation(self.btn2, b'pos', self) animation2.setKeyValueAt(0, QPoint(50, 50)) animation2.setKeyValueAt(0.25, QPoint(400, 50)) animation2.setKeyValueAt(0.5, QPoint(400, 400)) animation2.setKeyValueAt(0.75, QPoint(50, 400)) animation2.setKeyValueAt(1, QPoint(50, 50)) animation2.setDuration(8000) # animation2.start() animation_group = QParallelAnimationGroup(self) animation_group.addAnimation(animation1) animation_group.addAnimation(animation2) animation_group.start() self.btn1.clicked.connect(animation_group.pause) self.btn2.clicked.connect(animation_group.resume) if __name__ == "__main__": app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
到此這篇關于pyqt5中動畫的使用詳解的文章就介紹到這了,更多相關pyqt5 動畫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
在CMD窗口中調用python函數(shù)的實現(xiàn)
本文主要介紹了在CMD窗口中調用python函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07Windows系統(tǒng)配置python腳本開機啟動的3種方法分享
這篇文章主要介紹了Windows系統(tǒng)配置python腳本開機啟動的3種方法分享,本文講解了開始菜單啟動項實現(xiàn)、開機腳本、通過一個服務調用該腳本三種方法,需要的朋友可以參考下2015-03-03