Animated loading screen
Project description
py-loading-screen
Module for Python - animated loading screen Used modules:
- asyncio
- math
- time.sleep
- PyQt5.QtCore, PyQt5.QtWidgets, PyQt5.QtGui
Tested on python: 3.7.4, windows: x32, x64
Installing:
$ pip install py-loading-screen
import:
$ from pyLoadingScreen import LoadingScreen
If by some reason you have not python interpreter - you can see compiled demo-application (windows): 'example\compiled'
LoadingScreen(PyQt5.QtWidgets.QFrame)
Params:
texts = ['Loading', 'Loading.', 'Loading..', 'Loading...'],
textUpdateDelay = 0.75,
parentWidget = None,
windowSize = (350, 350),
mainStyleSheet = "background-color: black; color: rgb(80, 0, 255);",
mainFrameWidth = 3,
textLabelStyleSheet = "background-color: black; color: white; font: bold 18px;",
animationType = "RoundRobin", # Animation types available: "RoundRobin", "RibbonDance"
animationDetailРЎoefficient = 20,
animationRGBColor = (255, 0, 0),
animationColorRainbow = True,
animationColorRainbowStep = 2,
animationColorRainbowMinValues = (0, 0, 0),
animationColorRainbowMaxValues = (255, 255, 255),
animationLineWidth = 3,
animationScale = 0.95,
animationCountStepsPerRound = 1440
Notes:
1. I recommend running this in a new thread. Anyway, you need to create instance of LoadingScreen at main thread, then start worker function in any thread.
If you want to start in new 'clear' thread - use 'worker' function, else if you wont to create task with asyncio - use 'worker_asyncio' coroutine.
!!! Variable with LoadingScreen instance must exist all time while script is running !!!
- New thread start full example:
"
from pyLoadingScreen import LoadingScreen
from threading import Thread
from PyQt5 import QtWidgets
app = QtWidgets.QApplication([])
screen = LoadingScreen()
thread = Thread(target=screen.worker)
thread.start()
app.exec()
"
- Asyncio create task example (in this case, you still can’t use main thread for loop, becouse it will be busy by app.exec() loop (see above)):
"
...
self.screen = LoadingScreen()
loop = asyncio.get_event_loop()
asyncio.gather(self.screen.worker_async(), loop=loop)
...
"
2. To stop work use 'exit' attribute of LoadingScreen instance or create attribute 'exit_' in 'worker' or 'worker_async' function.
Work is stop after some time after signal to exit. You can check LoadingScreen instance state by 'isRunning' attribute.
Example:
"
from pyLoadingScreen import LoadingScreen
from threading import Thread
from PyQt5 import QtWidgets
from time import sleep
def kill_after_5_seconds(screenInstance: object):
sleep(5)
screenInstance.exit = True
screenInstance.worker.__dict__['exit_'] = True
# Equivalent to 'self.screen.exit = True'
screenInstance.worker_async.__dict__['exit_'] = True
# Equivalent to 'self.screen.exit = True',
# but in this case - it will not take any effect,
# because 'worker' is using instead ('thread = Thread(target=screen.worker)')
while True:
if screenInstance.isRunning:
print("LoadingScreen is still running")
else:
print("LoadingScreen is not running now!")
print()
input("Press ENTER to exit.")
break
app = QtWidgets.QApplication([])
screen = LoadingScreen()
thread = Thread(target=screen.worker)
thread.start()
threadMonitoring = Thread(target=kill_after_5_seconds, args=(screen,))
threadMonitoring.start()
app.exec()
"
3. If you set parentWidget - don't forget add LoadingScreen to parentWidget's layout!
Example:
"
...
self.screen = LoadingScreen(parentWidget=self.ui.myParentWidget)
self.ui.myParentWidget.layout().addWidget(self.screen)
...
"
4. If animationColorRainbow == True, then param 'animationRGBColor' ignored
5. If animationColorRainbow == False, then params ignored:
animationColorRainbowStep,
animationColorRainbowMinValues,
animationColorRainbowMaxValues
6. animationCountStepsPerRound - speed of rotation. animationCountStepsPerRound increases - rotation speed decreases
7. By some reason i can't create instance of LoadingScreen in Spyder (Anaconda, Python 3.7.4), but in outer program this work fine.
Versions:
v1.1.6:
- Bug fixes
- Description has been supplemented
v1.1.5:
- Restyled "RibbonDance" animation.
v1.1.4:
- Added 2nd animation type - "RibbonDance". Now available 2 animation types: "RoundRobin" (default) and "RibbonDance"
- Added selection of animation type in example application
- Improved animation quality by using float type coordinates instead of integer type
- Renamed param "animationFacesCount" to "animationDetailРЎoefficient"
v1.0.3:
- Bug fixes
v1.0.2:
- Release on PyPI, now module is available using pip: 'pip install py-loading-screen'
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
Close
Hashes for py_loading_screen-1.1.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 891a31082dbe66626467be87407e7b282c35e0b873290773faa03ba5bbcfb638 |
|
MD5 | c6baf50556ce7339f3a00444bda33e04 |
|
BLAKE2b-256 | 6a34bd00a327b551cafab726cd67f539cdd45fa2eaf5d85258d52aa44887d980 |