python gui教程pyqt5_Python GUI教程(十五):在PyQt5中使用动画

2023-11-02

QT作为一个全面的桌面应用程序开发包,其自然提供了对图像的动画支持。本篇文章中,就来简单地在PYQt5中使用Animation动画功能。

本篇将会依次完成以下功能:

– 在GUI界面中显示一个图片(用一个足球做演示);

– 点击按钮实现足球的直线射门动画;

– 点击按钮实现足球的曲线射门动画;

一、在图形界面显示图片的两种方法

一般情况下,想要在GUI中显示图片,我们会通过:

– 实例化一个QLable()部件;

– 实例化一个QPixmap()图形类;

– 通过QLabel()部件的setPixmap()方法设置QLabel()部件的图形;

就像如下代码所示:

# coding:utf-8

from PyQt5 import QtGui,QtWidgets

import sys

class MainUi(QtWidgets.QMainWindow):

def __init__(self):

super().__init__()

self.init_ui()

def init_ui(self):

self.setWindowTitle("动画使用-zmister.com") # 设置窗口标题

self.resize(400,200) # 规定窗口大小

self.main_widget = QtWidgets.QWidget() # 创建一个widget部件

self.label = QtWidgets.QLabel(self.main_widget) # 创建一个文本标签部件

png = QtGui.QPixmap() # 创建一个绘图类

png.load("logo.png") # 从pngz中加载一个图片

self.label.setPixmap(png) # 设置文本标签的图形

self.setCentralWidget(self.main_widget)

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

gui = MainUi()

gui.show()

sys.exit(app.exec_())

运行上述代码,我们将会得到如下所示的图形界面:

17320fa158779fe67ba8784524fccd6f

但是这种方法没有办法实现对图片更多的控制。为了更好地对图形界面中的图片进行控制和管理,我们还需要使用到其他的类,比如QtWidgets中的QGraphicsScene类,QGraphicsScene提供了一个场景,用于对2D图形进行管理。同时,为了展示QGraphicsScene中的内容,我们还需要使用到QtWidgets中的QGraphicsView类来提供一个视图部件。

下面,我们就通过一个简单的例子来了解一下QGraphicsScene类和QGraphicsView类的使用。

首先是完整的代码,如下所示:

# coding:utf-8

from PyQt5 import QtGui,QtWidgets,QtCore

import sys

class MainUi(QtWidgets.QMainWindow):

def __init__(self):

super().__init__()

self.init_ui()

def init_ui(self):

self.setWindowTitle("动画使用-zmister.com") # 设置窗口标题

self.resize(400,200) # 规定窗口大小

self.main_widget = QtWidgets.QWidget() # 创建一个widget部件

self.grapview = QtWidgets.QGraphicsView(self.main_widget) # 创建一个图形视图,继承自main_widget

self.grapview.setGeometry(QtCore.QRect(10, 10, 380, 180)) # 设置图形视图的矩形区域

self.scene = QtWidgets.QGraphicsScene() # 创建一个图形管理场景

self.grapview.setScene(self.scene)

png = QtGui.QPixmap() # 创建一个绘图类

png.load("logo.png") # 从png中加载一个图片

item = QtWidgets.QGraphicsPixmapItem(png) #

self.scene.addItem(item)

self.setCentralWidget(self.main_widget)

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

gui = MainUi()

gui.show()

sys.exit(app.exec_())

在这里面,基础的窗口代码与之前的代码类似,有区别且最核心的为以下几行代码。

首先,我们实例化创建了一个用于展示图形场景的图形视图QGraphicsView(),将它继承自self.main_widget主窗口部件:

self.grapview = QtWidgets.QGraphicsView(self.main_widget)

然后,我们实例化创建了一个图形场景管理类QGraphicsScene(),并通过setScene()方法将图形视图self.grapview的图形场景设置为刚刚实例化创建的QGraphicsScene():

self.scene = QtWidgets.QGraphicsScene()

self.grapview.setScene(self.scene)

最后,我们通过QPixmap()创建并加载了一个图片,将其添加到图形项目QGraphicsPixmapItem()中,并通过addItem()方法将图形项目添加到图形场景管理self.scene中:

png = QtGui.QPixmap()

png.load("logo.png")

item = QtWidgets.QGraphicsPixmapItem(png)

self.scene.addItem(item)

如此,我们就完成了通过QGraphicsView()类和QGraphicsScene()类在图形界面(GUI)中展示图片的功能,运行完整的代码,其显示出来的图形界面程序如下图所示:

f5325167948781f2f109bb3fe0cfe1c2

二、几行代码射个门

上面我们通过两种不同的方式实现了图片在图形界面中的展示,接下来,我们借助QtCore中的QPropertyAnimation()来实现图片的动画效果。

QPropertyAnimation()类主要依靠操纵对象的QT属性来实现动画效果,其有几个比较主要的方法:

start():用于启动动画;

stop():用于停止动画;

setStartValue():用于设置动画的起始值;

setEndValue():用于设置动画的结束值;

setDuration():用于设置动画的持续时间;

setKeyValueAt():用于在特定时间创建一个关键的动画帧动作;

setLoopCount():用于设置动画的循环次数;

下面我们就使用QPropertyAnimation()类实现图片的动画。为了动画的效果比5毛特效要好一点,州的先生(公众号:zmister2016)在阿里的图标库iconfont里找了一个小足球和球门的图标,嗯,就像这样:

6ac69cb43913e2c3cc0b8d0ec1b43c89

cafa89b877d1c2e7561bce7f6248ff01

然后,我们创建一个图形界面,里面包含一个按钮、一个小球和一个球门的图片:

# coding:utf-8

from PyQt5 import QtGui,QtWidgets,QtCore

import sys

class MainUi(QtWidgets.QMainWindow):

def __init__(self):

super().__init__()

self.init_ui()

def init_ui(self):

self.setWindowTitle("动画使用-zmister.com") # 设置窗口标题

self.resize(400,200) # 规定窗口大小

self.main_widget = QtWidgets.QWidget() # 创建一个widget部件

self.button = QtWidgets.QPushButton('射门',self.main_widget) # 创建一个按钮

self.button.setGeometry(10,10,60,30) # 设置按钮位置

self.label = QtWidgets.QLabel(self.main_widget) # 创建一个文本标签部件用于显示足球

self.label.setGeometry(50,80,50,50) # 设置足球位置

png = QtGui.QPixmap()  # 创建一个绘图类

png.load("football.png")  # 从png中加载一个图片

self.label.setPixmap(png)  # 设置文本标签的图形

self.label.setScaledContents(True)

self.qiumen = QtWidgets.QLabel(self.main_widget)  # 创建一个文本标签部件用于显示球门

self.qiumen.setGeometry(345, 75, 50, 50)  # 设置球门位置

pngqiumen = QtGui.QPixmap()  # 创建一个绘图类

pngqiumen.load("qiumen.png")  # 从png中加载一个图片

self.qiumen.setPixmap(pngqiumen)  # 设置文本标签的图形

self.setCentralWidget(self.main_widget)

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

gui = MainUi()

gui.show()

sys.exit(app.exec_())

运行上述代码,我们会得到一个如下图所示的图形界面:

cea2473d8891142c8015b76537b21521

我们的目的是想让图形界面中的小足球通过按钮控制,进入到球门中。接下来,我们就通过QPropertyAnimation()类来实现这个效果。

在MainUi()中新建一个名为shoot()的方法,在其中写入以下代码:

self.anim = QtCore.QPropertyAnimation(self.label,b'geometry') # 设置动画的对象及其属性

self.anim.setDuration(2000) # 设置动画间隔时间

self.anim.setStartValue(QtCore.QRect(50,80,50,50)) # 设置动画对象的起始属性

self.anim.setEndValue(QtCore.QRect(360, 90, 10, 10)) # 设置动画对象的结束属性

self.anim.start() # 启动动画

最后,我们再讲按钮的点击信号绑定到shoot()方法上:

self.button.clicked.connect(self.shoot)

完整的代码如下所示:

# coding:utf-8

from PyQt5 import QtGui,QtWidgets,QtCore

import sys

class MainUi(QtWidgets.QMainWindow):

def __init__(self):

super().__init__()

self.init_ui()

def init_ui(self):

self.setWindowTitle("动画使用-zmister.com") # 设置窗口标题

self.resize(400,200) # 规定窗口大小

self.main_widget = QtWidgets.QWidget() # 创建一个widget部件

self.button = QtWidgets.QPushButton('射门',self.main_widget) # 创建一个按钮

self.button.setGeometry(10,10,60,30) # 设置按钮位置

self.button.clicked.connect(self.shoot)

self.label = QtWidgets.QLabel(self.main_widget) # 创建一个文本标签部件用于显示足球

self.label.setGeometry(50,80,50,50) # 设置足球位置

png = QtGui.QPixmap()  # 创建一个绘图类

png.load("football.png")  # 从png中加载一个图片

self.label.setPixmap(png)  # 设置文本标签的图形

self.label.setScaledContents(True) # 图片随文本部件的大小变动

self.qiumen = QtWidgets.QLabel(self.main_widget)  # 创建一个文本标签部件用于显示球门

self.qiumen.setGeometry(345, 75, 50, 50)  # 设置球门位置

pngqiumen = QtGui.QPixmap()  # 创建一个绘图类

pngqiumen.load("qiumen.png")  # 从png中加载一个图片

self.qiumen.setPixmap(pngqiumen)  # 设置文本标签的图形

self.setCentralWidget(self.main_widget)

def shoot(self):

self.anim = QtCore.QPropertyAnimation(self.label,b'geometry') # 设置动画的对象及其属性

self.anim.setDuration(2000) # 设置动画间隔时间

self.anim.setStartValue(QtCore.QRect(50,80,50,50)) # 设置动画对象的起始属性

self.anim.setEndValue(QtCore.QRect(360, 90, 10, 10)) # 设置动画对象的结束属性

self.anim.start() # 启动动画

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

gui = MainUi()

gui.show()

sys.exit(app.exec_())

运行上述代码,点击“射门”按钮,我们将会得到如下动图所示的动画:

9e848de87cbd5ec56a28c25aa06cd1ab

这样,通过QPropertyAnimation()的setDuration()方法、setStartValue()方法、setEndValue()方法我们就实现了一个简单的动画。

三、圆月弯刀继续射门

但是上面的射门动画是一条直线将小足球移动到了球门之内,简单粗暴欠缺了些许美感,下面,我们让这个射门换一种方式,用圆月弯刀的香蕉球将小足球射入球门。

还记得上面我们提过QPropertyAnimation()的setKeyValueAt()这个用于设置动画关键帧的方法。现在我们就将利用它来实现足球射门时的曲线。

与上面的图形界面的代码不一样的是,我们需要绘制一条曲线线条来作为足球射门时的路径。所以我们需要对上面的图形界面的代码进行一些修改:

# coding:utf-8

from PyQt5 import QtGui,QtWidgets,QtCore

import sys

class MainUi(QtWidgets.QMainWindow):

def __init__(self):

super().__init__()

self.init_ui()

def init_ui(self):

self.setWindowTitle("动画使用-州的先生zmister.com") # 设置窗口标题

self.resize(400,200) # 规定窗口大小

self.main_widget = QtWidgets.QWidget() # 创建一个widget部件

self.button = QtWidgets.QPushButton('射门',self.main_widget) # 创建一个按钮

self.button.setGeometry(10,10,60,30) # 设置按钮位置

self.label = QtWidgets.QLabel(self.main_widget) # 创建一个文本标签部件用于显示足球

self.label.setGeometry(50,150,50,50) # 设置足球位置

png = QtGui.QPixmap()  # 创建一个绘图类

png.load("football.png")  # 从png中加载一个图片

self.label.setPixmap(png)  # 设置文本标签的图形

self.label.setScaledContents(True) # 图片随文本部件的大小变动

self.qiumen = QtWidgets.QLabel(self.main_widget)  # 创建一个文本标签部件用于显示球门

self.qiumen.setGeometry(345, 75, 50, 50)  # 设置球门位置

pngqiumen = QtGui.QPixmap()  # 创建一个绘图类

pngqiumen.load("qiumen.png")  # 从png中加载一个图片

self.qiumen.setPixmap(pngqiumen)  # 设置文本标签的图形

self.path = QtGui.QPainterPath() # 实例化一个绘制类,用于绘制动作

self.path.moveTo(50, 150)

self.path.cubicTo(50, 150, 50, 20, 370, 90)

self.setCentralWidget(self.main_widget)

# 重写patintEvent()方法

def paintEvent(self, e):

qp = QtGui.QPainter()

qp.begin(self)

qp.drawPath(self.path) # 在图形界面上根据self.path绘制一条线条

qp.end()

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

gui = MainUi()

gui.show()

sys.exit(app.exec_())

在上面的代码中,与之前的程序代码有一下不同之处:

我们实例化创建了一个QtGui.QPainterPath(),用于进行绘制操作。通过它的moveTo()方法,设置了绘制的起始点,通过它的cubicTo()方法,设置的绘制的整个路径:

self.path = QtGui.QPainterPath() # 实例化一个绘制类,用于绘制动作

self.path.moveTo(50, 150)

self.path.cubicTo(50, 150, 50, 20, 370, 90)

接着,我们重写了窗口的paintEvent()方法,根据绘制操作的定义,在图形上绘制一条相应的线条:

def paintEvent(self, e):

qp = QtGui.QPainter()

qp.begin(self)

qp.drawPath(self.path) # 在图形界面上根据self.path绘制一条线条

qp.end()

这样,我们的图形界面程序呈现出来的就是如下图所示的样子:

4483493977685d08a821bb95f9d3b841

图形上呈现了我们设置的足球将要运动的轨迹,接下来,我们通过QPropertyAnimation()的setKeyValueAt()设置关键帧的路径,来实现足球曲线射门,具体操作同样在shoot()方法中进行:

def shoot(self):

self.anim_x = QtCore.QPropertyAnimation(self.label, b'geometry')                    self.anim_x.setDuration(3000)

self.anim_x.setStartValue(QtCore.QRect(50,150,50,50)) # 设置动画对象的起始属性

positionValues = [n / 10  for n in range(0, 10)]

for n,i in enumerate(positionValues):

x = self.path.pointAtPercent(i).x()

y = self.path.pointAtPercent(i).y()

z =  50 - n*3.5

self.anim_x.setKeyValueAt(i,QtCore.QRect(x, y,z,z))

self.anim_x.setEndValue(QtCore.QRect(360, 90, 10, 10))

self.anim_x.start()

最后,同样将“射门”按钮的点击信号绑定在shoot()方法上。运行程序代码,点击“射门”按钮,将会出现如下动图所示的动画效果:

3a62b51ebb413ba60541a0e222a69bb5

为了更加的美观,其实可以将重写的paintEvent()去掉,在这里为了演示路径,就没有去除。

在PyQt5中使用动画是不是很简单?有问题欢迎留言讨论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python gui教程pyqt5_Python GUI教程(十五):在PyQt5中使用动画 的相关文章

  • h3c虚拟服务器无效,请教:H3C模拟器中防火墙无法PING通PC(虚拟主机) - H3C技术论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    H3C网络模拟器版本 HCL 2 0 2 1 防火墙F1060 使用虚拟主机 PC 连接防火墙G1 0 1端口 防火墙G1 0 1端口IP地址 192 168 0 1 24 PC机端口IP地址 192 168 0 2 24 配置命令 sec
  • ros的入门知识

    ros的入门教程链接 linux ros安装 学前小案例 键盘控制小海龟的移动 创建工作空间与功能包 发布者publisher 订阅者subscriber ros的基础知识点 不同的linux系统安装的ros版本是不一样的 linux18
  • nmake简介

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 nmake学习初步 前言 一 nmake在哪里 二 Makefile编写 1 hello c实例代码 2 Makefile 3 扩展 前言 一直使用vs的IDE 最近编译sq
  • tomcat守护进程

    如何写一个linux系统下的tomcat守护进程呢 上菜 1 编写守护进程shell脚本 下面这个脚本可以直接拿过来用 只需要改URL 和 tomcat启动目录即可 bin bash echo Start URL http 127 0 0
  • 六、线性队列

    序言 结构图 队列结构 队列常用操作 队列的实现 序言 线性队列是用数组实现的队列 队列遵循的原则FIFO first in first out 通常我们说的线性队列 为了节省数组的空间使用 都是循环队列 结构图 队列结构 typedef
  • 【函数(上)(双重for循环)】

    1 循环 1 双重for循环 概述 循环嵌套是指在一个循环语句中再定义一个循环语法结构 例如 嵌套一个for循环 这样for循环语句我们称之为双重for循环 双重for循环语法 for 外循环的初始 外循环的条件 外循环的表达式 for 内
  • LoadOfTheRoot提权学习

    端口碰撞 端口试探 port knocking 是一种通过连接尝试 从外部打开原先关闭端口的方法 一旦收到正确顺序的连接尝试 防火墙就会动态打开一些特定的端口给允许尝试连接的主机 端口试探的主要目的是防治攻击者通过端口扫描的方式对主机进行攻
  • swagger3的配置和使用(一)

    目录 Swagger3简介 Swagger的组成 Swagger的Springboot配置 maven添加依赖 创建swagger的配置类 访问路径 application yml环境配置 API分组 Swagger常用注解 注解说明 用于
  • URLSearchParams快速解析URL查询参数

    浏览器 Window 内置的 URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串 再也不用 字符串分割的方式去解析 url query 参数了 一 URLSearchParams 构造函数 URLSearc
  • 百度APP视频播放中的解码优化

    背景 在全民视频的时代 百度APP中视频播放是十分重要的业务 随着 5G 的到来 视频播放已经不满足以前的标清 高清 超清乃至于 4K 已经是旧时王谢堂前燕飞入寻常百姓家 越来越清晰的视频源 越来越复杂的视频编码 对 APP 的视频解码能力
  • Android设备接入阿里云IoT物联网平台——设备接入类

    1 准备工作 1 1 注册阿里云账号 使用个人淘宝账号或手机号 开通阿里云账号 并通过 实名认证 可以用支付宝认证 1 2 免费开通IoT物联网套件 产品官网 https www aliyun com product iot 1 3 软件环
  • 微信小程序发布迭代版本后如何提示用户强制更新新版本

    在点击小程序发布的时候选择 升级选项 之前用户使用过的再打开小程序页面就会弹出升级弹窗modal
  • esp32 CMT130-V1.0 PS 240*240屏幕显示一张图片的实验

    1 使用ImageConverter565软件 将图片转为120 120大小 保存为后缀名为 c的文件 保存 2 具体pic c代码如下 3 改为如下格式的文件pic h 复制到路径 Arduino hardware espressif e
  • python 结合 Flask 的html页面嵌入for 语句

    近期有个项目 使用python和Flask框架 渲染页面后 需要使用循环显示不定长的数据 由于Flask是基于python的web框架 因此可以在html页面中直接使用 嵌套python语法 官方示例如下 https dormousehol
  • linux rpm包的编译

    有些软件包的特性是编译者选定的 如果编译未选定此特性 将无法使用 rpm包的版本落后于源码包 因此需要定制安装 也就是手动编译安装 编译需要编译环境 编译的过程如下 1 下载源码 2 执行 tar xf 3 cd到源码文件夹内 config
  • 按键状态机(实现单击,长按,双击)的模块分享

    目录 一 相关说明 二 分析 三 模块代码 三 代码讲解 四 作者的话 一 相关说明 1 需要的资源 一个定时器 一个按键 2 相关设置 利用定时器计时中断 10ms进行一次按键扫描 3 使用说明 定时器中断的优先级要设置高一点 相关的宏定
  • Matplotlib控制线条的颜色与风格

    通常对图形的第一次调整是调整它线条的颜色与风格 plt plot 函数可以通过相应的参数设置颜色与风格 要修改颜色 就可以使用 color 参数 它支持各种颜色值的字符串 颜色的不同表示方法如下所示 plt plot x np sin x
  • 面试第一关:自我介绍【含自我介绍模板】

    芝士AI吃鱼 了解更多的面试 AI知识经验 自我介绍是每一个面试必不可少的环节 也是求职应聘必须克服的一关 通过自我介绍 吸引面试官的注意力 自我介绍是你与面试官建立联系的第一步 也是面试的一个重要环节 通过一个清晰 有条理的自我介绍 你可
  • 最详细查看apk签名信息

    首先你需要java环境 或者你安装了Android Studio 随便用手机下载一个apk 这里我用的是QQ的apk 然后将这个apk发送到电脑上 接下来将这个 apk后缀名改为 zip 如下图所示 然后就是超简单的解压缩 然后你可以看到下

随机推荐

  • 什么是数据安全性?

    数据安全性是指在数字信息的整个生命周期中保护数字信息不受未经授权的访问 损坏或盗窃 这个概念涵盖了信息安全的各个方面 从硬件和存储设备的物理安全到管理和访问控制 以及软件应用程序的逻辑安全 数据安全涉及部署工具和技术 以增强组织对其关键数据
  • rust react tauri app 现有前端项目打包(windows)

    现有前端项目打包 环境配置 nodejs及相应包管理器 npm或yarn rust 开发环境 WebView2 安装 下载地址https developer microsoft com en us microsoft edge webvie
  • 导入exel后端校验完直接返回结果excel流前端自动下载

    var formData new FormData layero find form 0 var xhr new XMLHttpRequest xhr responseType blob xhr onload function e if t
  • mysql 5.7 主从配置优化_mysql-5.7的主从配置

    mysql的主从配置 下载最新mysql 的yum源 1 wget https dev mysql com get mysql57 community release el6 11 noarch rpm 安装最新mysql rpm ivh
  • mysql binlog 日志详解

    一 binlog概述 binlog是Mysql sever层维护的一种二进制日志 与innodb引擎中的redo undolog是完全不同的日志 其主要是用来记录对mysql数据更新或潜在发生更新的SQL语句 并以 事务 的形式保存在磁盘中
  • SpringBoot对数据进行持久化

    SpringBoot关闭服务后 对数据进行持久化操作 文章目录 SpringBoot关闭服务后 对数据进行持久化操作 1 放入需要持久化的数据 2 调用自定义的销毁方法 3 关闭程序可见控制台输入需要持久化的数据 提示 以下是本篇文章正文内
  • textarea高度随内容自动改变

    需求 textarea默认的高度不是对着内容变化 而是随着内容增多 出现了滚动条 目前的需求是实现一个能够输入的textarea 并且高度跟着内容变化 发现了一个比较好用的插件flexText 但是这个基于jquery写的 目前的技术栈是r
  • 【DRF】序列化器ModelSerializer的使用

    不使用序列化器的过程 1 把前端发送请求过来的json字符串 通过json loads转换成字典 字典转换为Python对象 存在数据库 2 返回给前端数据 是把对象查询出来 转换成字典 再通过JsonResponse转换为json字符串
  • 通信技术及云计算

    绪论 传输网络层是物联网的重要基础设施 从通信的角度来讲 传输网作为通信网的一个业务网 通信子网 在通信网络中 它承载着 物联 的作用 物联网的数据传输 由早期采用的有线方式 到后期更多无线方式的使用 在两个或多个设备之间近距离的解决了物物
  • 853. 有边数限制的最短路 bellman_ford算法模板

    给定一个n个点m条边的有向图 图中可能存在重边和自环 边权可能为负数 请你求出从1号点到n号点的最多经过k条边的最短距离 如果无法从1号点走到n号点 输出impossible 注意 图中可能 存在负权回路 输入格式 第一行包含三个整数n m
  • 我们在囧途之程序员做私活小记

    注 本文使用第一人称 原型取材于周围同事或民间 不一定代表作者本人 欢迎大家提供您的囧途素材 发送至shenyisyn gmail com 讲起做私活 很多程序员都会或多或少的涉及过 一般咱要去接点私活可能会有以下几个原因 1 咱们 有长远
  • Win11运行cmd提示“请求的操作需要提升”的解决方法

    cmd是用于执行输入的命令 我们大部分都用其排除或解决某些类型的Windows问题 但是近期有部分Win11用户在运行cmd时出现提示 请求的操作需要提升 的情况 这是怎么回事呢 出现这一情况很有可能是因为操作权限不足导致的 还有详细的电脑
  • 游戏开发Unity UGUI知识系列:点击屏幕响应事件

    参考 https blog csdn net Ro969668074 article details 81362727 总结 核心是在monobehaviour的update方法对注册的方法进行调用
  • 使用Milvus2.0时pip install pymilvus后无法import pymilvus的问题

    原因 使用Milvus2 0版本时 对应的pymilvus版本已经是2 0 0rc5 或以上版本 了 不能使用pip install pymilvus安装低版本的pymilvus了 解决方案 pip install pymilvus 2 0
  • QGIS - 帮助文档汇总

    Ref 1 Welcome to the QGIS project 2 QGIS Tutorials and Tips QGIS Tutorials and Tips
  • &&&&&&用法

    的含义 按位与操作 按二进制位进行 与 运算 运算规则 有 0 则为 0 0 0 0 0 1 0 1 0 0 1 1 1 x的含义 x 在计算机存储是用x的补码存储 就是在x的值的基础上进行按位取反 x 之后在增加1所得 也就是说 x x
  • Java 中Iterator 、Vector、ArrayList、List 使用深入剖析

    线性表 链表 哈希表是常用的数据结构 在进行Java开发时 JDK已经为我们提供了一系列相应的类来实现基本的数据结构 这些类均在java util包中 本文试图通过简单的描述 向读者阐述各个类的作用以及如何正确使用这些类 Collectio
  • kubectl常用命令大全详解

    这是我转载的一个博主写的 K8s 常用命令大全 里面详细介绍了 K8s 的命令 如果看了我写的入门基础篇文章 想了解更多命令可以看以下的文章 说明 Kubernetes kubectl 命令表 中文网址 Kubernetes kubectl
  • Echarts canvas大小和容器不一致

    const ele document getElementById id setTimeout gt 基于准备好的dom 初始化echarts实例 const myChart echarts init ele width document
  • python gui教程pyqt5_Python GUI教程(十五):在PyQt5中使用动画

    QT作为一个全面的桌面应用程序开发包 其自然提供了对图像的动画支持 本篇文章中 就来简单地在PYQt5中使用Animation动画功能 本篇将会依次完成以下功能 在GUI界面中显示一个图片 用一个足球做演示 点击按钮实现足球的直线射门动画