动态忙碌光标

This commit is contained in:
Irony 2020-03-13 00:30:54 +08:00
parent 5065d26249
commit 4615ab72f8
13 changed files with 114 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

46
Demo/GifCursor.py Normal file
View file

@ -0,0 +1,46 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on 2020年3月13日
@author: Irony
@site: https://pyqt.site https://github.com/892768447
@email: 892768447@qq.com
@file: Demo.GifCursor
@description:
"""
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton
from Demo.Lib.QCursorGif import QCursorGif
__Author__ = 'Irony'
__Copyright__ = 'Copyright (c) 2020'
__Version__ = 1.0
class Window(QWidget, QCursorGif):
def __init__(self, *args, **kwargs):
super(Window, self).__init__(*args, **kwargs)
# 设置忙碌光标图片数组
self.initCursor(['Data/Images/Cursors/%d.png' %
i for i in range(8)], self)
self.setCursorTimeout(100)
layout = QVBoxLayout(self)
layout.addWidget(QPushButton(
'start busy', self, clicked=self.startBusy))
layout.addWidget(QPushButton(
'stop busy', self, clicked=self.stopBusy))
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_())

58
Demo/Lib/QCursorGif.py Normal file
View file

@ -0,0 +1,58 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on 2020年3月13日
@author: Irony
@site: https://pyqt.site https://github.com/892768447
@email: 892768447@qq.com
@file: Demo.Lib.QCursorGif
@description:
"""
from PyQt5.QtCore import QTimer, Qt
from PyQt5.QtGui import QCursor, QPixmap
from PyQt5.QtWidgets import QApplication
__Author__ = 'Irony'
__Copyright__ = 'Copyright (c) 2020'
__Version__ = 1.0
class QCursorGif:
def initCursor(self, cursors, parent=None):
# 记录默认的光标
self._oldCursor = Qt.ArrowCursor
self.setOldCursor(parent)
# 加载光标图片
self._cursorImages = [
QCursor(QPixmap(cursor)) for cursor in cursors]
self._cursorIndex = 0
self._cursorCount = len(self._cursorImages) - 1
# 创建刷新定时器
self._cursorTimeout = 200
self._cursorTimer = QTimer(parent)
self._cursorTimer.timeout.connect(self._doBusy)
def _doBusy(self):
if self._cursorIndex > self._cursorCount:
self._cursorIndex = 0
QApplication.instance().setOverrideCursor(
self._cursorImages[self._cursorIndex])
self._cursorIndex += 1
def startBusy(self):
if not self._cursorTimer.isActive():
self._cursorTimer.start(self._cursorTimeout)
def stopBusy(self):
self._cursorTimer.stop()
QApplication.instance().setOverrideCursor(self._oldCursor)
def setCursorTimeout(self, timeout):
self._cursorTimeout = timeout
def setOldCursor(self, parent=None):
self._oldCursor = (parent.cursor() or Qt.ArrowCursor) if parent else (
QApplication.instance().overrideCursor() or Qt.ArrowCursor)

View file

@ -22,6 +22,7 @@
- [调整窗口显示边框](#19调整窗口显示边框) - [调整窗口显示边框](#19调整窗口显示边框)
- [判断信号是否连接](#20判断信号是否连接) - [判断信号是否连接](#20判断信号是否连接)
- [调用虚拟键盘](#21调用虚拟键盘) - [调用虚拟键盘](#21调用虚拟键盘)
- [动态忙碌光标](#22动态忙碌光标)
## 1、重启窗口Widget ## 1、重启窗口Widget
[运行 RestartWindow.py](RestartWindow.py) [运行 RestartWindow.py](RestartWindow.py)
@ -214,4 +215,11 @@ PyQt 结合 Opencv 进行人脸检测;
2. Linux上调用的是`florence`,`onboard`,`kvkbd`,这三种屏幕键盘需要自行安装 2. Linux上调用的是`florence`,`onboard`,`kvkbd`,这三种屏幕键盘需要自行安装
![CallVirtualKeyboard1](ScreenShot/CallVirtualKeyboard1.png) ![CallVirtualKeyboard1](ScreenShot/CallVirtualKeyboard1.png)
![CallVirtualKeyboard2](ScreenShot/CallVirtualKeyboard2.png) ![CallVirtualKeyboard2](ScreenShot/CallVirtualKeyboard2.png)
## 22、动态忙碌光标
[运行 GifCursor.py](GifCursor.py)
通过定时器不停的修改光标图片来实现动态效果
![GifCursor](ScreenShot/GifCursor.gif)

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

View file

@ -244,6 +244,7 @@ https://pyqt.site 论坛是专门针对PyQt5学习和提升开设的网站
- [背景连线动画](Demo/CircleLine.py) - [背景连线动画](Demo/CircleLine.py)
- [判断信号是否连接](Demo/IsSignalConnected.py) - [判断信号是否连接](Demo/IsSignalConnected.py)
- [调用虚拟键盘](Demo/CallVirtualKeyboard.py) - [调用虚拟键盘](Demo/CallVirtualKeyboard.py)
- [动态忙碌光标](Demo/GifCursor.py)
# QQ群 # QQ群