<div dir="ltr">Thanks for your continued work on PyQt, Phil. The improvements to the PyPI packaging over the last few years are particularly appreciated - everything is a lot easier than it used to be.<div><br></div><div>Just wanted to let you know about a few issues I came across:</div><div><br></div><div>- The Wayland driver appears to be missing libQt6WaylandEglClientHwIntegration.so.6. When starting a PyQt app with QT_QPA_PLATFORM=wayland:</div><div><div><br></div><div>Cannot load library PyQt6/Qt6/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so: (libQt6WaylandEglClientHwIntegration.so.6: cannot open shared object file: No such file or directory)" <br>Qt warning: Failed to load client buffer integration: "wayland-egl" <br>Qt warning: Available client buffer integrations: QList("wayland-egl", "xcomposite-egl", "xcomposite-glx")</div><div><br></div><div>Things work correctly when it's copied from a Qt6 install into PyQt6/Qt6/lib.</div><div> <br></div><div>- QtWebEngineProcess appears to have a malformed signature in the macOS builds, and needs to be re-signed before WebEngine will work on a Mac:</div><div><br>codesign -s  - \</div><div>PyQt6/Qt6/lib/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess<br><br>- the macos_amd64 wheels should probably use 11_0 - they are currently 10_14, and pip refuses to install them with 'no matching distributions' on an Apple M1 machine.<br></div><div><br></div><div>- The uic tool is outputting a few old-style enums that don't work, and need to be adjusted:</div><br>line = line.replace(<br>    "QAction.PreferencesRole", "QAction.MenuRole.PreferencesRole"<br>)<br>line = line.replace("QAction.AboutRole", "QAction.MenuRole.AboutRole")<br>line = line.replace(<br>    "QComboBox.AdjustToMinimumContentsLength",<br>    "QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLength",<br>)</div><div><br></div><div>This is for content like the following in an action:</div><div><br></div><div>118-   <property name="menuRole"><br>119:    <enum>QAction::PreferencesRole</enum><br>120-   </property></div><div><br></div><div>and for qcombobox:</div><div><br></div><div>60-      <widget class="QComboBox" name="field"><br>61-       <property name="sizeAdjustPolicy"><br>62:        <enum>QComboBox::AdjustToMinimumContentsLengthWithIcon</enum><br>63-       </property><br>64-      </widget><br></div><div><br></div><div><div>Also one issue not specific to the 6.2.0 release - the provided typings are a big help, and coming from a 5.x release, it's nice to see py.typed being included by default. One issue that still seems to remain though is that mypy does not pick up references to missing attributes/methods on objects inheriting from PyQt. This means if you make a class that inherits from QDialog for example, and then call self.a_custom_func_that_was_removed_in_a_refactor(), mypy can't warn you about it. We're currently applying some transformations to the distributed .pyi files to work around it:<br><br># inheriting from the missing sip.sipwrapper definition<br># causes missing attributes not to be detected, as it's treating<br># the class as inheriting from Any<br>line = line.replace("PyQt6.sip.wrapper", "object")<br># remove blanket getattr in QObject which also causes missing<br># attributes not to be detected<br>if "def __getattr__(self, name: str) -> typing.Any" in line:<br>    continue</div></div><div><br></div><div>We also automatically add '# type: ignore' comments to any '.connect(' line in generated uic files, as the types don't currently cover the signals. Apart from that, the typing is working great.<br></div><div><br></div><div>Cheers,</div><div>Damien</div><div><br></div><div><br></div></div>