.api/.pyi files and scoped enums
Phil Thompson
phil at riverbankcomputing.com
Sun Dec 6 10:16:07 GMT 2020
On 06/12/2020 03:55, Kovid Goyal wrote:
> In my opinion, having PyQt6 disallow access to enums at the top level
> is a mistake. FOr the following reasons:
>
> 1) It adds a huge maintenance burden to move from PyQt5 to
> PyQt6, and Florian's valiant efforts nothwithstanding, this cant be
> done
> automatically. Remember that enum values can be accessed from instances
> as well as classes. For instance the following idiom is very common in
> calibre code:
>
> d = SomeQDialogDerivedClass()
> if d.exec_() == d.Accepted: # to avoid having to type
> SomeQDialogDerivedClass
> ...
>
> 2) Accessing enum values via scope is a huge and largely unnecessary
> pain. You have to type redundant information every time.
> Qt.GlobalColor.white is just stupid compared to Qt.white. Not to
> mention
> that the extra attribute access is a performance cost, albeit a tiny
> one.
>
> I strongly suggest that you preserve the existing top level enums in
> PyQt6. By all means use scoped ones for new enums and change the docs
> to
> encourage people to use scoped ones if you prefer. But breaking
> backward
> compatibility like this is really not a good idea. It would be one
> thing
> if these could be migrated reliably automatically, but they cant. So
> its
> going to create huge amounts of unneccessary and very boring make work
> and there will be some that inevitably slip through the cracks causing
> runtime errors for end users.
Sorry, not going to happen.
The "new" behaviour was implemented (and the old behaviour deprecated)
in PyQt5 v5.11 (2 and a half years ago). The old behaviour is unPythonic
and inconsistent, the new behaviour uses a standard Python type.
Phil
More information about the PyQt
mailing list