Qt for Python 5.15.0 is out!

Hello everyone! We are really happy to announce that Qt for Python 5.15.0 is now out! 🎊🐍

As always, you can get the latest via: pip install pyside2, or just upgrading your current installation: pip install -U pyside2.

At the same time we wanted to release another version for users still on 5.14, so we decided to release too. You can get it via pip install pyside2==

We spent most of our time dealing with an old issue related to Threads and Python, but still - we had time to work on other improvements, that you can check in our changelog. Now, let's talk a bit about this release.


Threading in PySide

Long time ago, even before the the official release, we had a bug report pointing out a problem while running Threads in a PySide application. We thought it was an important thing to solve, but we never expected that it will require a whole new way on how we interact with Python's Global Interpreter Lock (GIL).

We invested a lot of time trying to figure it out, and by mixing different approaches the team thought to solve the issue, we ended up finding a proper solution.

In a nutshell, the solution was done with:

  • A caching mechanism to avoid allocating the GIL when methods have no override with a Python Function.

  • Reduce the usage of Py_BEGIN_ALLOW_THREAD and Py_END_ALLOW_THREAD,

  • Not allowing threads by default in all the methods, but just when required.

You can read more about this adventure here: PYSIDE-803 but in summary, we are happy to let you all know that the reactivity in threading was greatly enhanced!🎉

The story didn't end there, since now with this strict approach we needed to take special care with many corner cases, one of them being PYSIDE-813, from which we learn that the CPython function PyDict_GetItem works with a thread state to maintain the global error variables, but more importantly we found a race condition that happened in our Signal Manager.

These fixes were in 5.14, and that's the reason we wanted to include the latest discoveries and fixes in two new version on top of 5.14.2.

Commercial offering

When we were not busy figuring out the GIL and Threading issues in PySide, we spent our time listening to many request from Qt Customers who wanted to use some modules from Qt for Automation with Python. We are really happy to announce that 5.15.0 is the first release of Qt for Python with commercial additions:

Qt for Automation license holders will get the option to download the packages from https://account.qt.io/downloads

Commercial customers will get the Python Packages (wheels) not from PyPi, which is it what enables you to just type  pip install pyside2,  but via an internal download link. After downloading the packages, it will be possible to install the files by running the following commands:

pip install shiboken2-5.15.0.commercial-5.15.0-cp35.cp36.cp37.cp38-none-win_amd64.whl
pip install PySide2-5.15.0.commercial-5.15.0-cp35.cp36.cp37.cp38-none-win_amd64.whl

Remember that this does not include the Shiboken Generator, the binding generation tool, because the installation require extra steps, which you can follow here.

Community Engagement

There are many ways to build Graphical User Interfaces with Python out there, but we have been seeing a large increment in our user base, and we firmly believe that that's the most important part of the project.

We joined a Hacktoberfest event in Berlin, where people decided to help us porting a couple of examples from C++ to Python. We are really thankful for that.

Our partner KDAB also contributed to Qt for Python, and we have managed to improve the module due to the interaction with them.

When users want to get started with contributions, we try to help them in our various communication channels. As an example,  now we have QtSerialPort available in PySide, thanks to Andreas, an external contributor, who needed the module, and decided to contribute it to the project.

Last but not least, we want to thank our contributors who are actively helping other users on the Mailing list, IRC, Matrix, Gitter, Keybase, and Telegram.

If you are interested you can join us in any of these platforms here!.

What's next?

We were developing Qt 5.15 with Qt6 in mind, and we are trying to focus in how to improve the current state of the module.

  • Documentation: C++ Snippets, missing examples, arguments errors, etc, those are the common problems we hear the community is having, and we are trying little by little to improve the current situation. Luckily, we are preparing guides for people to help us improve the current state of the docs.


  • Examples and Tutorials: After the Qt Virtual Tech Con 2020 many people started to ask for more examples, and the possibility to have longer sessions to describe the most popular cases. For this we are planning new events, and materials related to how to mix C++ and Python, and more.


  • Shiboken: Besides the high demand for tutorials and more examples, we are focusing our efforts on adjust the current behavior towards Qt6. We already started do some house cleaning in our binding generator tool. We would love to hear from you what's missing. What do you need related to Shiboken?


  • PySide: Improving the commercial offering will give us the opportunity of getting feedback from our customers, which will be using different commercial application scenarios, that will bring to the table new use cases from which we can improve the module.

    Shout out to all the OSS projects relying on PySide, we have been having direct contact with them, to prioritize bugs, and to add new ad-hoc functionality to the module.

We are doing our best to try to bring all the opportunities we have for Qt6 (described in PYSIDE-904) to our users but we would be even happier to hear what do you think is needed or missing.

Let's be in touch!, download Qt 5.15, and join our Community!

Blog Topics: