[PyQt] Qt/PyQt 5.9.x. Correct way to get an "enumeration flags" to return 0?

Phil Thompson phil at riverbankcomputing.com
Thu Jul 11 16:07:36 BST 2019


On 11/07/2019 15:59, J Barchan wrote:
> On Thu, 11 Jul 2019 at 15:10, Phil Thompson 
> <phil at riverbankcomputing.com>
> wrote:
> 
>> On 11/07/2019 07:56, J Barchan wrote:
>> > On Wed, 10 Jul 2019 at 21:28, Barry Scott <barry at barrys-emacs.org>
>> > wrote:
>> >
>> >>
>> >>
>> >> On 10 Jul 2019, at 11:55, J Barchan <jnbarchan at gmail.com> 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


More information about the PyQt mailing list