pyqt6-overlay-busy-indicator


Namepyqt6-overlay-busy-indicator JSON
Version 1.6 PyPI version JSON
download
home_pagehttps://github.com/pohemati/pyqt6-overlay-busy-indicator
SummaryA customizable overlay busy indicator with a smooth fade animation for PyQt6
upload_time2024-10-14 18:55:58
maintainerNone
docs_urlNone
authorPoria Hemati
requires_pythonNone
licenseMIT
keywords pyqt6 overlay busy indicator progressbar loading
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# PyQt6 Overlay Busy Indicator

A customizable overlay busy indicator with a smooth fade animation for PyQt6

If you are using PySide6, you can download the code in [PySide6](https://github.com/pohemati/pyside6-overlay-busy-indicator).


## Installation

Install package using pip

```python
  pip install pyqt6-overlay-busy-indicator
```



## Screenshots

![App Screenshot](https://raw.githubusercontent.com/pohemati/pyqt6-overlay-busy-indicator/main/qbusyindicator/assets/screenshot.gif)



## Usage/Examples

```python
from qbusyindicator import QOverlayBusyIndicator


class Dialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        # widgets and layouts
        self.busy_indicator = QOverlayBusyIndicator(self)
        
        # connecting signals
        self.busy_indicator.started.connect(lambda: print('started'))
        self.busy_indicator.stopped.connect(lambda: print('stopped'))

        # start the indicator
        self.busy_indicator.start()
        
        # stop the indicator
        self.busy_indicator.stop()

        # stop the indicator after 5 seconds
        self.busy_indicator.stopAfter(5000)

        # returns True if the indicator is currently busy
        self.busy_indicator.isBusy() 

        # returns True if the indicator is about to stop(e.g. returns true after calling stopAfter method)
        self.busy_indicator.isStopping()

        # returns True if the indicator is currently stopped
        self.busy_indicator.isStopped()

        # sets the busy gif animation/image path
        # you can use qt resources files too
        # for clearing image/gif animation you can call this method using an empty string
        self.busy_indicator.setImagePath('loading.gif') 

        # returns gif animation path
        self.busy_indicator.imagePath()

        # blocks keyboard input on dialog/window while busy. default is False
        self.busy_indicator.setBlockKeyboard(True) 

        # returns True if the keyboard input is blocked
        self.busy_indicator.keyboardBlocked()

        # blocks mouse input on dialog/window while busy. default is False
        self.busy_indicator.setBlockMouse(True) 

        # returns True if the mouse input is blocked
        self.busy_indicator.mouseBlocked()

        # sets the duration of fade in/out animations to 2 seconds. default is 400 msecs
        self.busy_indicator.setFadeDuration(2000) 

        # returns current fade duration
        self.busy_indicator.fadeDuratrion()

        # changing the label font
        self.busy_indicator.setLabelFont(QtGui.QFont('Calibri', 20))

        # returns current label font
        self.busy_indicator.labelFont()

        # changing the label text
        self.busy_indicator.setLabelText(self.tr('Loading...')) 

        # returns current label text
        self.busy_indicator.labelText()

        # changing the background color of overlay
        # default is rgba(204, 204, 204, 70)
        self.busy_indicator.setStyleSheet('background-color: rgba(204, 204, 204, 60);')
        
        # changing the color and style of the text
        # default is 'color: #808080; padding-top: 5px;'
        self.busy_indicator.label.setStyleSheet('color: #CCC; padding-top: 10px;')

    # never forget to override resizeEvent method of your dialog/window
    # to ensure that busy indicator will be automically resized with dialog
    def resizeEvent(self, event):
        self.busy_indicator.resize(event.size())
        return super().resizeEvent(event)
```

if you prefer snake-case syntax over camel-case, and you would like to use properties to access/customize widget's behavior you can use following example.

```python
from qbusyindicator import QOverlayBusyIndicator


class Dialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        # widgets and layouts
        self.busy_indicator = QOverlayBusyIndicator(self)
        
        # connecting signals
        self.busy_indicator.started.connect(lambda: print('started'))
        self.busy_indicator.stopped.connect(lambda: print('stopped'))

        # start the indicator
        self.busy_indicator.start()
        
        # stop the indicator
        self.busy_indicator.stop()

        # stop the indicator after 5 seconds
        self.busy_indicator.stop_after(5000)

        # returns true if the indicator is currently busy
        self.busy_indicator.is_busy() 

        # returns true if the indicator is about to stop(e.g. returns true after calling stop_after method)
        self.busy_indicator.is_stopping()

        # returns true if the indicator is currently stopped
        self.busy_indicator.is_stopped()

        # sets the busy gif animation/image path
        # you can use qt resources files too
        # for clearing gif animation/image you can assign this attribute an empty string
        self.busy_indicator.image_path = 'loading.gif'

        # blocks keyboard input on dialog/window while busy. default is False
        self.busy_indicator.block_keyboard = True

        # blocks mouse input on dialog/window while busy. default is False
        self.busy_indicator.block_mouse = True

        # sets the duration of fade in/out animations to 2 seconds. default is 400 msecs
        self.busy_indicator.fade_duration = 2000

        # changing the label font
        self.busy_indicator.label_font = QtGui.QFont('Calibri', 20)

        # changing the label text
        self.busy_indicator.label_text = self.tr('Loading...')
    
    # never forget to override resizeEvent method of your dialog/window
    # to ensure that busy indicator will be automically resized with dialog
    def resizeEvent(self, event):
        self.busy_indicator.resize(event.size())
        return super().resizeEvent(event)
```


## Demo

After installing qbusyindicator package using pip, you can run demo.py file in the examples directory, for example:

```
cd examples
python demo.py
```

![Demo Screenshot](https://raw.githubusercontent.com/pohemati/pyqt6-overlay-busy-indicator/main/qbusyindicator/assets/demo-screenshot.png)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/pohemati/pyqt6-overlay-busy-indicator",
    "name": "pyqt6-overlay-busy-indicator",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "pyqt6, overlay, busy, indicator, progressbar, loading",
    "author": "Poria Hemati",
    "author_email": "poria.hemati@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/9d/c4/e9c06d627cb5228462f46d42339879a745e581f710f3420d8f4d1fec76c2/pyqt6-overlay-busy-indicator-1.6.tar.gz",
    "platform": null,
    "description": "\r\n# PyQt6 Overlay Busy Indicator\r\n\r\nA customizable overlay busy indicator with a smooth fade animation for PyQt6\r\n\r\nIf you are using PySide6, you can download the code in [PySide6](https://github.com/pohemati/pyside6-overlay-busy-indicator).\r\n\r\n\r\n## Installation\r\n\r\nInstall package using pip\r\n\r\n```python\r\n  pip install pyqt6-overlay-busy-indicator\r\n```\r\n\r\n\r\n\r\n## Screenshots\r\n\r\n![App Screenshot](https://raw.githubusercontent.com/pohemati/pyqt6-overlay-busy-indicator/main/qbusyindicator/assets/screenshot.gif)\r\n\r\n\r\n\r\n## Usage/Examples\r\n\r\n```python\r\nfrom qbusyindicator import QOverlayBusyIndicator\r\n\r\n\r\nclass Dialog(QtWidgets.QDialog):\r\n    def __init__(self, parent=None):\r\n        super().__init__(parent)\r\n        # widgets and layouts\r\n        self.busy_indicator = QOverlayBusyIndicator(self)\r\n        \r\n        # connecting signals\r\n        self.busy_indicator.started.connect(lambda: print('started'))\r\n        self.busy_indicator.stopped.connect(lambda: print('stopped'))\r\n\r\n        # start the indicator\r\n        self.busy_indicator.start()\r\n        \r\n        # stop the indicator\r\n        self.busy_indicator.stop()\r\n\r\n        # stop the indicator after 5 seconds\r\n        self.busy_indicator.stopAfter(5000)\r\n\r\n        # returns True if the indicator is currently busy\r\n        self.busy_indicator.isBusy() \r\n\r\n        # returns True if the indicator is about to stop(e.g. returns true after calling stopAfter method)\r\n        self.busy_indicator.isStopping()\r\n\r\n        # returns True if the indicator is currently stopped\r\n        self.busy_indicator.isStopped()\r\n\r\n        # sets the busy gif animation/image path\r\n        # you can use qt resources files too\r\n        # for clearing image/gif animation you can call this method using an empty string\r\n        self.busy_indicator.setImagePath('loading.gif') \r\n\r\n        # returns gif animation path\r\n        self.busy_indicator.imagePath()\r\n\r\n        # blocks keyboard input on dialog/window while busy. default is False\r\n        self.busy_indicator.setBlockKeyboard(True) \r\n\r\n        # returns True if the keyboard input is blocked\r\n        self.busy_indicator.keyboardBlocked()\r\n\r\n        # blocks mouse input on dialog/window while busy. default is False\r\n        self.busy_indicator.setBlockMouse(True) \r\n\r\n        # returns True if the mouse input is blocked\r\n        self.busy_indicator.mouseBlocked()\r\n\r\n        # sets the duration of fade in/out animations to 2 seconds. default is 400 msecs\r\n        self.busy_indicator.setFadeDuration(2000) \r\n\r\n        # returns current fade duration\r\n        self.busy_indicator.fadeDuratrion()\r\n\r\n        # changing the label font\r\n        self.busy_indicator.setLabelFont(QtGui.QFont('Calibri', 20))\r\n\r\n        # returns current label font\r\n        self.busy_indicator.labelFont()\r\n\r\n        # changing the label text\r\n        self.busy_indicator.setLabelText(self.tr('Loading...')) \r\n\r\n        # returns current label text\r\n        self.busy_indicator.labelText()\r\n\r\n        # changing the background color of overlay\r\n        # default is rgba(204, 204, 204, 70)\r\n        self.busy_indicator.setStyleSheet('background-color: rgba(204, 204, 204, 60);')\r\n        \r\n        # changing the color and style of the text\r\n        # default is 'color: #808080; padding-top: 5px;'\r\n        self.busy_indicator.label.setStyleSheet('color: #CCC; padding-top: 10px;')\r\n\r\n    # never forget to override resizeEvent method of your dialog/window\r\n    # to ensure that busy indicator will be automically resized with dialog\r\n    def resizeEvent(self, event):\r\n        self.busy_indicator.resize(event.size())\r\n        return super().resizeEvent(event)\r\n```\r\n\r\nif you prefer snake-case syntax over camel-case, and you would like to use properties to access/customize widget's behavior you can use following example.\r\n\r\n```python\r\nfrom qbusyindicator import QOverlayBusyIndicator\r\n\r\n\r\nclass Dialog(QtWidgets.QDialog):\r\n    def __init__(self, parent=None):\r\n        super().__init__(parent)\r\n        # widgets and layouts\r\n        self.busy_indicator = QOverlayBusyIndicator(self)\r\n        \r\n        # connecting signals\r\n        self.busy_indicator.started.connect(lambda: print('started'))\r\n        self.busy_indicator.stopped.connect(lambda: print('stopped'))\r\n\r\n        # start the indicator\r\n        self.busy_indicator.start()\r\n        \r\n        # stop the indicator\r\n        self.busy_indicator.stop()\r\n\r\n        # stop the indicator after 5 seconds\r\n        self.busy_indicator.stop_after(5000)\r\n\r\n        # returns true if the indicator is currently busy\r\n        self.busy_indicator.is_busy() \r\n\r\n        # returns true if the indicator is about to stop(e.g. returns true after calling stop_after method)\r\n        self.busy_indicator.is_stopping()\r\n\r\n        # returns true if the indicator is currently stopped\r\n        self.busy_indicator.is_stopped()\r\n\r\n        # sets the busy gif animation/image path\r\n        # you can use qt resources files too\r\n        # for clearing gif animation/image you can assign this attribute an empty string\r\n        self.busy_indicator.image_path = 'loading.gif'\r\n\r\n        # blocks keyboard input on dialog/window while busy. default is False\r\n        self.busy_indicator.block_keyboard = True\r\n\r\n        # blocks mouse input on dialog/window while busy. default is False\r\n        self.busy_indicator.block_mouse = True\r\n\r\n        # sets the duration of fade in/out animations to 2 seconds. default is 400 msecs\r\n        self.busy_indicator.fade_duration = 2000\r\n\r\n        # changing the label font\r\n        self.busy_indicator.label_font = QtGui.QFont('Calibri', 20)\r\n\r\n        # changing the label text\r\n        self.busy_indicator.label_text = self.tr('Loading...')\r\n    \r\n    # never forget to override resizeEvent method of your dialog/window\r\n    # to ensure that busy indicator will be automically resized with dialog\r\n    def resizeEvent(self, event):\r\n        self.busy_indicator.resize(event.size())\r\n        return super().resizeEvent(event)\r\n```\r\n\r\n\r\n## Demo\r\n\r\nAfter installing qbusyindicator package using pip, you can run demo.py file in the examples directory, for example:\r\n\r\n```\r\ncd examples\r\npython demo.py\r\n```\r\n\r\n![Demo Screenshot](https://raw.githubusercontent.com/pohemati/pyqt6-overlay-busy-indicator/main/qbusyindicator/assets/demo-screenshot.png)\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A customizable overlay busy indicator with a smooth fade animation for PyQt6",
    "version": "1.6",
    "project_urls": {
        "Download": "https://github.com/pohemati/pyqt6-overlay-busy-indicator/archive/refs/tags/v1.6.tar.gz",
        "Homepage": "https://github.com/pohemati/pyqt6-overlay-busy-indicator"
    },
    "split_keywords": [
        "pyqt6",
        " overlay",
        " busy",
        " indicator",
        " progressbar",
        " loading"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9b85cb1f626fde35164c826f5a880f18a17f96dd0a76872230692fefcb874ecf",
                "md5": "440dee9ab77b784160254caec5072089",
                "sha256": "c4144d2ea41143091e2dcd759eba9de2b7e0a3c88f5a4727d82286a02a4b030f"
            },
            "downloads": -1,
            "filename": "pyqt6_overlay_busy_indicator-1.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "440dee9ab77b784160254caec5072089",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 45758,
            "upload_time": "2024-10-14T18:55:55",
            "upload_time_iso_8601": "2024-10-14T18:55:55.872453Z",
            "url": "https://files.pythonhosted.org/packages/9b/85/cb1f626fde35164c826f5a880f18a17f96dd0a76872230692fefcb874ecf/pyqt6_overlay_busy_indicator-1.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9dc4e9c06d627cb5228462f46d42339879a745e581f710f3420d8f4d1fec76c2",
                "md5": "14c7f3666c8214555feea3c2b719d20c",
                "sha256": "d9dabe577629c75050ad0674899edde3425ed2abb217e1959bcd0de6a24ec881"
            },
            "downloads": -1,
            "filename": "pyqt6-overlay-busy-indicator-1.6.tar.gz",
            "has_sig": false,
            "md5_digest": "14c7f3666c8214555feea3c2b719d20c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 45740,
            "upload_time": "2024-10-14T18:55:58",
            "upload_time_iso_8601": "2024-10-14T18:55:58.851158Z",
            "url": "https://files.pythonhosted.org/packages/9d/c4/e9c06d627cb5228462f46d42339879a745e581f710f3420d8f4d1fec76c2/pyqt6-overlay-busy-indicator-1.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-14 18:55:58",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pohemati",
    "github_project": "pyqt6-overlay-busy-indicator",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "pyqt6-overlay-busy-indicator"
}
        
Elapsed time: 1.54079s