A few issue with 6.2.0

Damien Elmes pyqt at ankiweb.net
Thu Oct 21 04:39:02 BST 2021


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.

Just wanted to let you know about a few issues I came across:

- The Wayland driver appears to be missing
libQt6WaylandEglClientHwIntegration.so.6. When starting a PyQt app with
QT_QPA_PLATFORM=wayland:

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)"
Qt warning: Failed to load client buffer integration: "wayland-egl"
Qt warning: Available client buffer integrations: QList("wayland-egl",
"xcomposite-egl", "xcomposite-glx")

Things work correctly when it's copied from a Qt6 install into
PyQt6/Qt6/lib.

- QtWebEngineProcess appears to have a malformed signature in the macOS
builds, and needs to be re-signed before WebEngine will work on a Mac:

codesign -s  - \
PyQt6/Qt6/lib/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess

- 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.

- The uic tool is outputting a few old-style enums that don't work, and
need to be adjusted:

line = line.replace(
    "QAction.PreferencesRole", "QAction.MenuRole.PreferencesRole"
)
line = line.replace("QAction.AboutRole", "QAction.MenuRole.AboutRole")
line = line.replace(
    "QComboBox.AdjustToMinimumContentsLength",
    "QComboBox.SizeAdjustPolicy.AdjustToMinimumContentsLength",
)

This is for content like the following in an action:

118-   <property name="menuRole">
119:    <enum>QAction::PreferencesRole</enum>
120-   </property>

and for qcombobox:

60-      <widget class="QComboBox" name="field">
61-       <property name="sizeAdjustPolicy">
62:        <enum>QComboBox::AdjustToMinimumContentsLengthWithIcon</enum>
63-       </property>
64-      </widget>

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:

# inheriting from the missing sip.sipwrapper definition
# causes missing attributes not to be detected, as it's treating
# the class as inheriting from Any
line = line.replace("PyQt6.sip.wrapper", "object")
# remove blanket getattr in QObject which also causes missing
# attributes not to be detected
if "def __getattr__(self, name: str) -> typing.Any" in line:
    continue

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.

Cheers,
Damien
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20211021/9af1586b/attachment.htm>


More information about the PyQt mailing list