Skip to main content

Qt utilities to enable hot-reloading of python/Qt code

Project description

qtreload

Qt utilities to enable hot-reloading of python/Qt code

License PyPI Python Version Test codecov

Have you been using Jupyter Notebook's magic functions such as

%load_ext autoreload
%autoreload 2

where you might have been editing code in VSCode or Pycharm and executing actions in Jupyter Notebook?

Or have you previously used LiClipse which has Debugger Auto-Reload?

Well, qtreload provides similar capabilities by 'hot-reloading' python modules when there are changes to the source code. It operates by generating a list of all possible modules/submodules for a specific project and then using QFileWatcher to observe any changes to these files.

This library should be used when developing Qt code in Python and you are not interested in continually having to restart your application. (See limitations to find out when its still required).

Usage

You can instantiate the QtReloadWidget manually or using the install_hot_reload function.

Note! Make sure to instantiate QApplication before running this code.

Using QtReloadWidget:

from qtreload.qt_reload import QtReloadWidget

# you can specify list of modules that should be monitored
list_of_widgets = ["napari", "spyder", "..."]

widget = QtReloadWidget(list_of_modules)

That's pretty much it. Now every time you make changes to your source code in e.g. napari will be reflected in your interpreter.

Using install_hot_reload requires two environment variabels being set, namely:

QTRELOAD_HOT_RELOAD=1
QTRELOAD_HOT_RELOAD_MODULES="napari, spyder"

Then you can just execute the following:

from qtreload.install import install_hot_reload

install_hot_reload()

When it works like magic

There are countless examples where this approach really well. Some examples:

  • You are running your application where you have method on_run but when you execute this function, you notice that you misspelled some variable. In normal circumstances you would need to restart the application. Now, however, you can correct it in your IDE, save, and try running again.
  • You are running your application and are modifying the layout of a popup window. Now you can do this and each time the dialog is reshown, the new version of the dialog will be shown.

Limitations

While this approach can be extremely useful and can save a lot of time, it has a couple of limitations:

  • code within the ___init__.py cannot be reloaded
  • some changes to GUI code cannot be reloaded - if e.g. you are modying the QMainWindow and just added a new button, this button will now be shown. In order to show it, you will still need to restart the application. If, however, you were modyfing a plugin or a dialog that is shown upon clicking on e.g. menu item, these changes WILL take place.
  • modifying python properties (@setter/@getter) is not always reloaded

Acknowledgements

The hot-reload code is directly copied from the PyDev debugger developed by fabioz with minimal changes to remove any dependencies

See https://github.com/fabioz/PyDev.Debugger/blob/main/_pydevd_bundle/pydevd_reload.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qtreload-0.1.2.tar.gz (22.2 kB view details)

Uploaded Source

Built Distribution

qtreload-0.1.2-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file qtreload-0.1.2.tar.gz.

File metadata

  • Download URL: qtreload-0.1.2.tar.gz
  • Upload date:
  • Size: 22.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for qtreload-0.1.2.tar.gz
Algorithm Hash digest
SHA256 149a5ed7f0ba8f1fe31855de7c6b9c0609a99d3b1a6a2245c4477753106edbe8
MD5 57b3a78b96ad31c470aa37e68a398e0b
BLAKE2b-256 beab8c55e6c7c0aeeb580f0c4928eea3bac326e24cfe9ff63a3622346f400bb7

See more details on using hashes here.

File details

Details for the file qtreload-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: qtreload-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for qtreload-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7e9d730cffd1465571d80fee839813b1c060fb03b87914c731732e2f1db884b3
MD5 b4ae238e87bff9196658c4582f6aba15
BLAKE2b-256 f719d18e8c138a977fca9a8d40726c7529afd0732d6c36227703a6204ca5f673

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page