113 Star 947 Fork 337

PyQt5/PyQt

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
.github
Demo
Donate
PyQtGraph
QAxWidget
QCalendarWidget
QCheckBox
QColumnView
QComboBox
QDateTime
QDateTimeEdit
QDial
QDockWidget
QDoubleSpinBox
QFileSystemModel
QFlowLayout
QFont
QFontComboBox
QFormLayout
QFrame
QGraphicsDropShadowEffect
QGraphicsView
QGridLayout
QGroupBox
QHBoxLayout
QLCDNumber
QLabel
QLineEdit
QListView
QListWidget
QMdiArea
QMenu
QMessageBox
QMetaObject
QOpenGLWidget
QPainter
QPlainTextEdit
QProcess
QProgressBar
QPropertyAnimation
Data
Lib
ScreenShot
FadeInOut.py
FlipWidgetAnimation.py
MenuAnimation.py
PageSwitching.py
README.en.md
README.md
RlatticeEffect.py
ShakeWindow.py
QProxyStyle
QPushButton
QRadioButton
QScrollArea
QScrollBar
QSerialPort
QSlider
QSpacerItem
QSpinBox
QSplashScreen
QSplitter
QStackedLayout
QStackedWidget
QSystemTrayIcon
QTabWidget
QTableView
QTableWidget
QTextBrowser
QTextEdit
QThread
QTimeEdit
QToolBox
QToolButton
QTreeView
QTreeWidget
QVBoxLayout
QWebChannel
QWebEngineView
QWebView
QWidget
QtChart
QtDataVisualization
QtQuick
QtRemoteObjects
QtWinExtras
Test
.gitattributes
.gitignore
LICENSE
README.md
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

QPropertyAnimation

1、窗口淡入淡出

运行 FadeInOut.py

  1. 使用QPropertyAnimation对窗口的windowOpacity透明度属性进行修改
  2. 窗口启动时开启透明度0-->1的动画
    1. 尝试先取消动画完成后关闭窗口的信号(使用同一个动画对象,在关闭窗口动画的时候连接了动画结束后关闭窗口的信号)
    2. 停止旧动画开启新动画
  3. 窗口关闭时开启透明度1-->0的动画
    1. 停止就动画
    2. 绑定动画完成后finished信号连接到close关闭窗口函数

FadeInOut

2、右键菜单动画

运行 MenuAnimation.py

  1. 使用QPropertyAnimation对菜单控件的geometry属性进行修改
  2. 当菜单事件contextMenuEvent触发时调用动画启动,同时显示菜单

MenuAnimation

3、点阵特效

运行 RlatticeEffect.py

  1. emmm,我也不知道这个动画叫啥名字,反正就是仿照网页做的
  2. 参考js源码,大概的原理就是:
    1. 先根据窗口大小随机创建一些点
    2. 遍历这些点找到跟它自己关联的点
    3. 动画开始画圆点、画连线
    4. 动画改变这些点的透明度, 用到了属性动画QPropertyAnimation
  3. 这里没有仔细去研究js里的算法优化,在浏览器里嗖嗖的就生成了,在py里好慢....
  4. 尽量在py里优化了循环操作,也简单的做了个cython加速也才提高了1s ? 1倍?...
  5. 不要为了xx用这玩意儿,和网页的效果一样,占CPU !!!!!!
  6. 如果有更好的优化算法请告知, 3Q
  7. PS: pyd是python3.4生成的,删掉pyd也能运行

这部分是js的核心

// for each point find the 5 closest points
for(var i = 0; i < points.length; i++) {
    var closest = [];
    var p1 = points[i];
    for(var j = 0; j < points.length; j++) {
        var p2 = points[j]
        if(!(p1 == p2)) {
            var placed = false;
            for(var k = 0; k < 5; k++) {
                if(!placed) {
                    if(closest[k] == undefined) {
                        closest[k] = p2;
                        placed = true;
                    }
                }
            }

            for(var k = 0; k < 5; k++) {
                if(!placed) {
                    if(getDistance(p1, p2) < getDistance(p1, closest[k])) {
                        closest[k] = p2;
                        placed = true;
                    }
                }
            }
        }
    }
    p1.closest = closest;
}

这部分是py的核心

def findClose(points):
    plen = len(points)
    for i in range(plen):
        closest = [None, None, None, None, None]
        p1 = points[i]
        for j in range(plen):
            p2 = points[j]
            dte1 = getDistance(p1, p2)
            if p1 != p2:
                placed = False
                for k in range(5):
                    if not placed:
                        if not closest[k]:
                            closest[k] = p2
                            placed = True
                for k in range(5):
                    if not placed:
                        if dte1 < getDistance(p1, closest[k]):
                            closest[k] = p2
                            placed = True
        p1.closest = closest

RlatticeEffect

4、页面切换/图片轮播动画

运行 PageSwitching.py | 查看 UiImageSlider.ui

  1. 使用QPropertyAnimationQStackedWidget中的子控件进行pos位移操作实现动画切换特效
  2. 主要代码参考http://qt.shoutwiki.com/wiki/Extending_QStackedWidget_for_sliding_page_animations_in_Qt
  3. 增加了自动切换函数

函数调用:

  1. slideInNext 下一页
  2. slideInPrev 上一页
  3. setCurrentIndex 切换到指定页
  4. autoStart(msec) 轮播模式, 默认是3000毫秒

PageSwitching

5、窗口抖动

运行 ShakeWindow.py

通过QPropertyAnimation对控件的pos属性进行死去活来的修改

ShakeWindow

6、窗口翻转动画(仿QQ)

运行 FlipWidgetAnimation.py

  1. 用了两个QLabel来显示模拟的图片界面,并实现鼠标点击模拟真实的窗口对应位置点击
  2. 用了QStackedWidget来存放上面的两个界面QLabel
  3. 点击切换时主要是对上面的两个界面进行截图并传递给翻转动画窗口
  4. 通过setWindowOpacity控制主窗口的显示隐藏(保留任务栏),当然也可以用hide
  5. 动画窗口FlipWidget.py主要实现两张图片的翻转显示,考虑到0-90和90-180之前的情况,以及图片的缩放动画

FlipWidgetAnimation

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/PyQt5/PyQt.git
git@gitee.com:PyQt5/PyQt.git
PyQt5
PyQt
PyQt
master

搜索帮助

371d5123 14472233 46e8bd33 14472233