[chimerax-users] Qt window toolkit dependency trouble

Tom Goddard goddard at sonic.net
Fri Apr 8 11:11:41 PDT 2022


Hi William,

  The ChimeraX 1.4 release we plan to make in the next month or two will use window toolkit Qt 6 and it has been in the ChimeraX daily builds for a few months.  The previous ChimeraX 1.3 release used Qt 5.  We had to update to the current Qt 6 because the QtCompany decided not to release any more bug fixes for Qt 5 except to commercial license holders (several thousand dollars), and a majority of ChimeraX crashes are bugs in the Qt window toolkit.  So it was necessary for us to move to Qt 6 which is getting bug fixes.

  This means Python import statements like "from PyQt5 import QtWidgets" won't work.  While you could use "from PyQt6 import QtWidgets" we instead prefer "from Qt import QtWidgets".  In the future we may move from PyQt6 to PySide6 which is another Python wrapper for Qt because currently we pay thousands of dollars for a PyQt license and PySide6 is free.  If you use "from Qt import QtWidgets" then when we switch to PySide6 a year or two from now your code will hopefully continue to work.

  I say "hopefully" because Qt 5, Qt 6, PyQt6 and PySide6 all have small differences which may break your code.  So as Tony says Qt 6 has QRegularExpression while Qt 5 called it QRegExp.  These changes are a pain.  But we suggest you focus on Qt 6 for any ChimeraX plugins.

  Trying to put a dependency in your ChimeraX plugin on PyQt5 when the underlying ChimeraX uses PyQt6 is certain to fail.  The same application cannot mix Qt 5 and Qt 6.  ChimeraX starts the Qt 6 event loop, and so if any Qt 5 code is used it simply won't work.  Our ChimeraX code all uses "from Qt import ...", so you can uninstall PyQt6 from ChimeraX and then install PyQt5 and ChimeraX will use Qt 5.  But I don't recommend that since  we will not maintain compatibility with old Qt 5 in new ChimeraX releases.

  I don't know if pycharm (Python IDE) supports Qt 6 or how to make it work with PyQt6.

  Sorry for these problems.  We were shocked that Qt crippled the future of Qt 5 by not distributing any bug fixes unless you pay big money, when Qt 6 is still very new.  I guess it means they are financially under pressure so this helps raise money for them from people who must stick with Qt 5, and also helps move most all their development effort to Qt 6.  Qt 5 was released about 10 years ago (Dec 2012), so I expect Qt 6 will likely keep us going for the next 10 years.

	Tom


> On Apr 8, 2022, at 9:36 AM, Anthony James Schaefer via ChimeraX-users <chimerax-users at cgl.ucsf.edu> wrote:
> 
> Hello,
> 
> Regular expressions are QRegularExpression in Qt.QtCore now. I think there's a ticket that listed some of the differences between Qt5 and Qt6, but I can't seem to find it. 
> 
> I don't use pycharm, so I'm not sure if there is a solution for that. Also not sure about adding PyQt5 to the dependencies.
> 
> Best,
> 
> Tony
> From: William Hofsøy <2wswer at gmail.com <mailto:2wswer at gmail.com>>
> Sent: Friday, April 8, 2022 12:17 PM
> To: Anthony James Schaefer <tony.schaefer at uga.edu <mailto:tony.schaefer at uga.edu>>
> Cc: chimerax-users at cgl.ucsf.edu <mailto:chimerax-users at cgl.ucsf.edu> <chimerax-users at cgl.ucsf.edu <mailto:chimerax-users at cgl.ucsf.edu>>
> Subject: Re: [chimerax-users] Dependency trouble
>  
> [EXTERNAL SENDER - PROCEED CAUTIOUSLY]
> 
> Hi again,
> I am indeed running a daily build on that computer.
> I tried your suggestion and it works partially but there are some issues.
> For instance I am getting:
> cannot import name 'QRegExp' from 'Qt.QtCore'
> 
> And I am also not sure how to set this up with pycharm as there is no module actually named just Qt. Which means I am getting red squiggles all over and it breaks the autocomplete.
> I am also curious as to why adding PyQt5 to the dependencies doesn't work.
> 
> fre. 8. apr. 2022 kl. 17:26 skrev Anthony James Schaefer <tony.schaefer at uga.edu <mailto:tony.schaefer at uga.edu>>:
> Is the other computer running a ChimeraX daily build? They are looking to switch to PyQt6 in one of the next versions. A ChimeraX developer would have more details on that. 
> 
> Try changing your PyQt5 imports to just "Qt" (e.g. from Qt.QtWidgets import QPushButton). ChimeraX uses a shim to make things less dependent on the version of the Python Qt wrapper. 
> 
> Best,
> 
> Tony
> From: ChimeraX-users <chimerax-users-bounces at cgl.ucsf.edu <mailto:chimerax-users-bounces at cgl.ucsf.edu>> on behalf of William Hofsøy via ChimeraX-users <chimerax-users at cgl.ucsf.edu <mailto:chimerax-users at cgl.ucsf.edu>>
> Sent: Friday, April 8, 2022 7:53 AM
> To: chimerax-users at cgl.ucsf.edu <mailto:chimerax-users at cgl.ucsf.edu> <chimerax-users at cgl.ucsf.edu <mailto:chimerax-users at cgl.ucsf.edu>>
> Subject: [chimerax-users] Dependency trouble
>  
> [EXTERNAL SENDER - PROCEED CAUTIOUSLY]
> 
> Hi,
> I was attempting to install my chimerax bundle on a different computer and encountered the error:
> No module named 'PyQt5'
> 
> So I added this line to the bundle_info.xml under the Dependencies tag:
> <Dependency name="PyQt5"/>
> 
> But I still get the same error?
> 
> _______________________________________________
> ChimeraX-users mailing list
> ChimeraX-users at cgl.ucsf.edu
> Manage subscription:
> https://www.rbvi.ucsf.edu/mailman/listinfo/chimerax-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.rbvi.ucsf.edu/pipermail/chimerax-users/attachments/20220408/692cdb32/attachment.html>


More information about the ChimeraX-users mailing list