iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >利用PyQt5模拟实现网页鼠标移动特效
  • 412
分享到

利用PyQt5模拟实现网页鼠标移动特效

2024-04-02 19:04:59 412人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

核心代码: from random import random from time import time from PyQt5.QtCore import QPropertyAni

核心代码:

from random import random
from time import time
from PyQt5.QtCore import QPropertyAnimation, QObject, pyqtProperty, QEasinGCurve,\
    Qt, QRectF, pyqtSignal
from PyQt5.QtGui import QColor, QPainterPath, QPainter
from PyQt5.QtWidgets import QWidget
__Author__ = """By: Irony
QQ: 892768447
Email: 892768447@qq.com"""
__Copyright__ = 'Copyright (c) 2018 Irony'
__Version__ = 1.0
try:
    import pointtool  # @UnusedImport @UnresolvedImport
    getDistance = pointtool.getDistance
    findClose = pointtool.findClose
except:
    import math
    def getDistance(p1, p2):
        return math.pow(p1.x - p2.x, 2) + math.pow(p1.y - p2.y, 2)
    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
class Target:
    def __init__(self, x, y):
        self.x = x
        self.y = y
class Point(QObject):
    valueChanged = pyqtSignal()
    def __init__(self, x, ox, y, oy, *args, **kwargs):
        super(Point, self).__init__(*args, **kwargs)
        self.__x = x
        self._x = x
        self.originX = ox
        self._y = y
        self.__y = y
        self.originY = oy
        # 5个闭合点
        self.closest = [0, 0, 0, 0, 0]
        # 圆半径
        self.radius = 2 + random() * 2
        # 连线颜色
        self.lineColor = QColor(156, 217, 249)
        # 圆颜色
        self.circleColor = QColor(156, 217, 249)
    def initAnimation(self):
        # 属性动画
        if not hasattr(self, 'xanimation'):
            self.xanimation = QPropertyAnimation(
                self, b'x', self, valueChanged=self.valueChanged.emit,
                easingCurve=QEasingCurve.InOutSine)
            self.yanimation = QPropertyAnimation(
                self, b'y', self, valueChanged=self.valueChanged.emit,
                easingCurve=QEasingCurve.InOutSine,
                finished=self.updateAnimation)
            self.updateAnimation()
    def updateAnimation(self):
        self.xanimation.stop()
        self.yanimation.stop()
        duration = (1 + random()) * 1000
        self.xanimation.setDuration(duration)
        self.yanimation.setDuration(duration)
        self.xanimation.setStartValue(self.__x)
        self.xanimation.setEndValue(self.originX - 50 + random() * 100)
        self.yanimation.setStartValue(self.__y)
        self.yanimation.setEndValue(self.originY - 50 + random() * 100)
        self.xanimation.start()
        self.yanimation.start()
    @pyqtProperty(float)
    def x(self):
        return self._x
    @x.setter
    def x(self, x):
        self._x = x
    @pyqtProperty(float)
    def y(self):
        return self._y
    @y.setter
    def y(self, y):
        self._y = y
class Window(QWidget):
    def __init__(self, *args, **kwargs):
        super(Window, self).__init__(*args, **kwargs)
        self.setMouseTracking(True)
        self.resize(800, 600)
        self.points = []
        self.target = Target(self.width() / 2, self.height() / 2)
        self.initPoints()
    def paintEvent(self, event):
        super(Window, self).paintEvent(event)
        painter = QPainter()
        painter.begin(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.fillRect(self.rect(), Qt.black)
        self.animate(painter)
        painter.end()
    def mouseMoveEvent(self, event):
        super(Window, self).mouseMoveEvent(event)
        # 鼠标移动时更新xy坐标
        self.target.x = event.x()
        self.target.y = event.y()
        self.update()
    def initPoints(self):
        t = time()
        self.points.clear()
        # 创建点
        stepX = self.width() / 20
        stepY = self.height() / 20
        for x in range(0, self.width(), int(stepX)):
            for y in range(0, self.height(), int(stepY)):
                ox = x + random() * stepX
                oy = y + random() * stepY
                point = Point(ox, ox, oy, oy)
                point.valueChanged.connect(self.update)
                self.points.append(point)
        print(time() - t)
        t = time()
        # 每个点寻找5个闭合点
        findClose(self.points)
        print(time() - t)
    def animate(self, painter):
        for p in self.points:
            # 检测点的范围
            value = abs(getDistance(self.target, p))
            if value < 4000:
                # 其实就是修改颜色透明度
                p.lineColor.setAlphaF(0.3)
                p.circleColor.setAlphaF(0.6)
            elif value < 20000:
                p.lineColor.setAlphaF(0.1)
                p.circleColor.setAlphaF(0.3)
            elif value < 40000:
                p.lineColor.setAlphaF(0.02)
                p.circleColor.setAlphaF(0.1)
            else:
                p.lineColor.setAlphaF(0)
                p.circleColor.setAlphaF(0)
            # 画线条
            if p.lineColor.alpha():
                for pc in p.closest:
                    if not pc:
                        continue
                    path = QPainterPath()
                    path.moveTo(p.x, p.y)
                    path.lineTo(pc.x, pc.y)
                    painter.save()
                    painter.setPen(p.lineColor)
                    painter.drawPath(path)
                    painter.restore()
            # 画圆
            painter.save()
            painter.setPen(Qt.NoPen)
            painter.setBrush(p.circleColor)
            painter.drawRoundedRect(QRectF(
                p.x - p.radius, p.y - p.radius, 2 * p.radius, 2 * p.radius), p.radius, p.radius)
            painter.restore()
            # 开启动画
            p.initAnimation()
if __name__ == '__main__':
    import sys
    import cgitb
    sys.excepthook = cgitb.enable(1, None, 5, '')
    from PyQt5.QtWidgets import QApplication
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

运行结果如下:

以上就是利用PyQt5模拟实现网页鼠标移动特效的详细内容,更多关于PyQt5鼠标特效的资料请关注编程网其它相关文章!

--结束END--

本文标题: 利用PyQt5模拟实现网页鼠标移动特效

本文链接: https://www.lsjlt.com/news/142931.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用PyQt5模拟实现网页鼠标移动特效
    核心代码: from random import random from time import time from PyQt5.QtCore import QPropertyAni...
    99+
    2024-04-02
  • 如何用PyQt5模拟实现网页鼠标移动特效
    这篇“如何用PyQt5模拟实现网页鼠标移动特效”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何用PyQt5模拟实现网页鼠标...
    99+
    2023-06-29
  • JS怎么实现网页鼠标特效
    这篇“JS怎么实现网页鼠标特效”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JS怎么实现网页鼠标特效”文章吧。实例一:禁用鼠...
    99+
    2023-06-26
  • JavaScript利用canvas实现鼠标跟随特效
    目录前言创建canvas画布定义鼠标 x / y初始化canvas画箭头循环动画鼠标事件前言 canvas是一个很神奇的玩意儿,比如画表格、画海报图都要用canvas去做,前几天有用...
    99+
    2022-11-13
    JavaScript canvas鼠标跟随特效 JavaScript canvas鼠标跟随 JavaScript 鼠标跟随
  • 利用css3实现鼠标经过动画显示详情特效
    本篇内容介绍了“利用css3实现鼠标经过动画显示详情特效”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  ...
    99+
    2024-04-02
  • 怎么使用CSS实现鼠标移动控制页面元素效果
    这篇文章主要介绍怎么使用CSS实现鼠标移动控制页面元素效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!映射鼠标位置或实现拖拽效果,我们可以在 JavaScript 中做到这一点。但实际上,在CSS中有更加简洁的方法...
    99+
    2023-06-14
  • Java如何实现鼠标随机移动效果
    这篇文章主要介绍“Java如何实现鼠标随机移动效果”,在日常操作中,相信很多人在Java如何实现鼠标随机移动效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java如何实现鼠标随机移动效果”的疑惑有所帮助!...
    99+
    2023-06-30
  • web开发中如何实现经典的网页鼠标特效
    这篇文章给大家分享的是有关web开发中如何实现经典的网页鼠标特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、鼠标指向出现实用特殊提示<!DOCTYPE ht...
    99+
    2024-04-02
  • 利用Java+Selenium+OpenCV模拟实现网页滑动验证
    目录一、需求分析二、模拟步骤1、使用selenium打开某音网页2、找到小滑块以及小滑块所在的背景图3、计算小滑块需要滑动的距离4、按住小滑块并滑动三、学习过程中比较棘手的问题1、截...
    99+
    2024-04-02
  • 如何利用HTML+CSS实现跟踪鼠标移动功能
    这篇文章将为大家详细讲解有关如何利用HTML+CSS实现跟踪鼠标移动功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。随着用户越来越关注隐私并越来越注意防止在线跟踪,用户开始使用广告拦截器和脚本拦截器来阻...
    99+
    2023-06-08
  • 利用CSS实现鼠标悬停时的模糊特效的技巧和方法
    在现代的网页设计中,动态效果对于吸引用户的注意力和提升用户体验至关重要。鼠标悬停特效是其中一种常见的交互效果,可以使网站更为生动和引人注目。本文将介绍如何利用CSS实现鼠标悬停时的模糊特效,并给出具体的代码示例。使用CSS filter属性...
    99+
    2023-10-21
    CSS 悬停 模糊效果
  • 怎么使用JS实现一个跟随鼠标移动洒落的星星特效
    这篇“怎么使用JS实现一个跟随鼠标移动洒落的星星特效”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用JS实现一个跟随鼠...
    99+
    2023-07-05
  • 原生JS实现鼠标滑动撒爱心特效
    本文实例为大家分享了一个鼠标滑动撒爱心的js特效,效果如下: 以下是代码实现,欢迎大家复制粘贴和收藏。 <!DOCTYPE html> <html lang=...
    99+
    2024-04-02
  • 利用CSS实现鼠标悬停时的抖动特效的技巧和方法
    鼠标悬停时的抖动特效可以为网页添加一些动感和趣味性,吸引用户的注意力。在这篇文章中,我们将介绍一些利用CSS实现鼠标悬停抖动特效的技巧和方法,并提供具体的代码示例。抖动的原理在CSS中,我们可以使用关键帧动画(keyframes)和tran...
    99+
    2023-10-21
    CSS动画 鼠标悬停 抖动效果
  • 利用Java+Selenium+OpenCV模拟如何实现网页滑动验证
    本篇文章给大家分享的是有关利用Java+Selenium+OpenCV模拟如何实现网页滑动验证,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。目前很多网页都有滑动验证,目的就是防...
    99+
    2023-06-26
  • css怎么实现随鼠标移动div渐变色效果
    这篇文章主要讲解了“css怎么实现随鼠标移动div渐变色效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css怎么实现随鼠标移动div渐变色效果”吧!HT...
    99+
    2024-04-02
  • js如何实现鼠标左右移动图片也跟着移动的效果
    这篇文章将为大家详细讲解有关js如何实现鼠标左右移动图片也跟着移动的效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果:鼠标往左移,图片对应右移,鼠标往右移,图片就左...
    99+
    2024-04-02
  • Java实现鼠标随机移动效果的示例代码
    目录前言实现代码效果图前言 疫情,需要远程办公,为了更好的远程办(划)公(水)。而我们公司因为没有想到会有大批量的远程办公,从而导致连接的人过多,需要抢占连接才能登录,而且好不容易抢...
    99+
    2024-04-02
  • 利用Vue模拟实现element-ui的分页器效果
    目录1. 思路1.1客户端1.2服务器2.服务器2.1创建数据2.2创建接口3.客户端3.1创建静态页面3.2请求数据3.3解析逻辑4.总结1. 思路 1.1客户端 利用vue相关的...
    99+
    2022-11-13
    Vue element-ui分页器 Vue element-ui分页 Vue element-ui
  • 怎么用纯css3实现鼠标悬停特效
    这篇文章主要介绍“怎么用纯css3实现鼠标悬停特效”,在日常操作中,相信很多人在怎么用纯css3实现鼠标悬停特效问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用纯css3...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作