Re: Qt/PyQt 5.9.x. Correct way to get an "enumeration flags" to return 0?
J Barchan <[email protected]>
| Newsgroups | gmane.comp.python.pyqt-pykde |
|---|---|
| Message-ID | <CABz3M_8js6Mj6gGuU_iRKOZ0nJK0OfLJ+rwBk-NSYYBOVQ9RrQ@mail.gmail.com> |
On Thu, 11 Jul 2019 at 16:07, Phil Thompson <[email protected]> wrote: > On 11/07/2019 15:59, J Barchan wrote: > > On Thu, 11 Jul 2019 at 15:10, Phil Thompson > > <[email protected]> > > wrote: > > > >> On 11/07/2019 07:56, J Barchan wrote: > >> > On Wed, 10 Jul 2019 at 21:28, Barry Scott <[email protected]> > >> > wrote: > >> > > >> >> > >> >> > >> >> On 10 Jul 2019, at 11:55, J Barchan <[email protected]> wrote: > >> >> > >> >> If I return QOrientations() that works, but I'm unsure if that > >> >> guarantees > >> >> to return zero. > >> >> > >> >> > >> >> I've not tried this - not ready to update Qt yet - does this print 0 > >> >> to > >> >> confirm the value in the enum? > >> >> > >> >> print( int( QOrientations()) > >> >> > >> >> Barry > >> >> > >> >> > >> > I confirm that int( QOrientations() ) returns 0. Assuming that is > >> > consistent/deliberate and not random (which I imagine it is) I guess > >> > that > >> > is what I will use here. > >> > > >> > I am still a little troubled by the fact that I can convert enum to > int > >> > via > >> > int(QOrientations(enum_value)) but have trouble converting int to enum > >> > via > >> > QOrientations(int_value). However the latter does seem to be a > PyCharm > >> > IDE > >> > warning ("Unexpected type 'int', expected 'Orientations', > >> > 'Orientation'") > >> > but works at run-time, so I guess it's OK even if I cannot find a > >> > formula > >> > which works without warning. It would be nice to see a PyQt expert > >> > statement on what is the correct way to handle this not-unusual > >> > requirement.... > >> > >> As you say the warning is coming from your IDE and I have no idea what > >> introspection it is doing to determine exactly what types are allowed. > >> As Orientation is an enum then an int is also allowed. > >> > >> Phil > >> > > > > Hi Phil, > > > > You wrote: > > > > As Orientation is an enum then an int is also allowed. > > > > > > Yes, Orientation is an enum, so Orientation(0) is an acceptable > > construct > > for that. But the function returns an Orientations, not an > > Orientation. > > Note the spelling (the extra "s" on the end), it's vital. Orientations > > is > > a *flags*, not an *enum*. The IDE accepts Orientation(0) (an enum) but > > not > > Orientations(0) (a flags). For Orientations it only accepts one or > > more > > Orientation joined together. > > > > That is why in my latest post a while ago, which you don't seem to be > > replying to, I said I seemed to have cracked it: Orientations(0) > > offends > > the IDE, but Orientations(Orientation(0)) works good! > > Yes, I know. As we both said, that warning is coming from the IDE. > Orientations(0) is fine as far as PyQt is concerned (because passing > Orientation is Ok and, therefore, passing 0 is Ok). > > Phil > Hi Phill, Yes, I see, thanks. It's a touch confusing (to me). I have an answer which works for me now, so the following is an academic question not a show-stopper. You made the point of saying: because passing Orientation is Ok and, therefore, passing 0 is Ok which implies that 0 is a valid Orientation. The C++ code for the function returning an Orientations just goes return 0. When I tried that first from Python/PyQt I got a *run-time* error (so nothing to do with IDE) stating something like "0 is an int and cannot be converted/used as a Orientations". I guess this is because at some level the C++ enum stuff is just treated as an int, but in Python/PyQt Orientation/Orientations are implemented as some kind of *class*, and that's different enough to cause the run-time failure, is that the reason? -- Kindest, Jonathan _______________________________________________ PyQt mailing list [email protected] https://www.riverbankcomputing.com/mailman/listinfo/pyqt