[PyQt] Checking a window's state using '&' is always returning False

Jayson Kempinger jkempinger at decisionvis.com
Mon Aug 21 21:45:18 BST 2017

I'm using PyQt 5.8 and trying to detect a window's state by comparing it to known window states using '&', but every comparison returns False.

For example:

> if win.windowState() & Qt.WindowNoState:
>     print("normal")
> elif win.windowState() & Qt.WindowMinimized:
>     print("minimized")
> elif win.windowState() & Qt.WindowMaximized:
>     print("maximized")
> else:
>     raise NotImplementedError

However, the comparison is always false (so I hit the exception), even though print(int(win.windowState()), int(Qt.WindowNoState)) shows "0 0".

The same syntax for other QFlags seems to work fine:

> if win.windowType() & Qt.Widget:
>     print("widget")
> elif win.windowType() & Qt.Window:
>     print("window")
> else:
>     raise NotImplementedError

My IDE, PyCharm, believes that the & operator is not defined for the WindowStates class and gives me a warning: `'WindowStates' does not define '__and__', so the '&' operator cannot be used on its instances`.  I can't seem to find the 5.8 documentation for this enum, but looking at the PyQt4 documentation (http://pyqt.sourceforge.net/Docs/PyQt4/qt-windowstates.html#__and__ <http://pyqt.sourceforge.net/Docs/PyQt4/qt-windowstates.html#__and__>) it is defined.

Is bitwise comparison not available for the WindowStates enum?  Or am I checking it incorrectly?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20170821/3f0a7fc8/attachment.html>

More information about the PyQt mailing list