Issues when promoting QPdfView in Designer
Phil Thompson
phil at riverbankcomputing.com
Fri Dec 22 10:57:41 GMT 2023
On 21/12/2023 18:57, Maurizio Berti wrote:
> Some time ago I realized that the QPdfView and QPdfDocument classes
> [re]introduced since Qt6.4 have the parent argument as mandatory, even
> if a
> real parent is actually required (using None is perfectly valid).
> I've never used these objects, except for knowledge purposes, so I
> didn't
> mind too much.
>
> Yesterday I came across this SO post:
> https://stackoverflow.com/q/77692836/2001654
>
> In this case the problem becomes more important: using QPdfView as a
> promoted widget in Designer results in a TypeError because the parent
> argument is keyworded, but even if the positional named argument is
> still
> "parent", it's not recognized as a standard python function would.
>
> I know that the issue mostly comes from the "wrong signature" in Qt and
> PyQt just does what its implementation is expected to do, and I also
> filed
> a report (QTBUG-120313 <https://bugreports.qt.io/browse/QTBUG-120313>).
>
> In the meantime, I proposed a couple of possible workarounds: patching
> instantiate() in qobjectcreator.py, or using a custom QPdfView subclass
> as
> a promoted widget instead of the default one.
>
> Still, I'd like to know the exact reason for which the parent argument
> isn't accepted if keyworded, since the apparent signature should allow
> that. I know that PyQt classes do some "magic" under the hood whenever
> a
> new instance is created, but I'm curious about these aspects and the
> difference with the normal, expected behavior.
>
> I'd also suggest to provide an official fix for this issue, considering
> that there's no guarantee that the Qt class constructors will be fixed
> anytime soon (and there would still be problems with previous Qt
> versions).
> Nonetheless, I realize that "officially" fixing this may be difficult
> or
> inconsistent and would potentially break some aspects (even
> semantically),
> in that case a note in the "Using Designer" documentation should
> probably
> be added.
>
> Thank you,
> MaurizioB
To answer the question about keyword arguments, PyQt uses the "Optional"
mode as described in...
https://www.riverbankcomputing.com/static/Docs/sip/annotations.html#function-annotation-KeywordArgs
...so that keywords cannot be used for any argument that is not
optional.
Regarding a proper fix, special casing QPdfView in the code isn't
acceptable but there are a couple of things that can be exploited. First
is that support for a non-optional parent is already there - see
_setupObject() in uiparser.py. Second is the widget plugin mechanism
(see the widget-plugins directory). It should be possible to extend the
latter to configure the former.
Phil
More information about the PyQt
mailing list