如何检查 Gtk 常量 (GdkWindowState) 是否包含标志

How to check if a Gtk Constant (GdkWindowState) contains a flag

一段时间以来,我一直在寻找如何检查 GdkWindowState 类型的 Gtk 常量是否包含标志。

我目前正在这样做:

    state=self.window_root.get_window().get_state()

    if 'GDK_WINDOW_STATE_FULLSCREEN' in str(state):
         ...

其中 self.window_rootGtk.Window

这是一个软技​​巧,但我想以正确的方式使用 Gdk.WindowState.FULLSCREEN

我已经尝试过一些类似的东西:if Gdk.WindowState.FULLSCREEN in state:但是常量是不可迭代的。我想指出的是,仅使用 if Gdk.WindowState.FULLSCREEN == state: 是行不通的,因为 window 也是重点。

当我打印 state 时,我得到:

<flags GDK_WINDOW_STATE_FULLSCREEN | GDK_WINDOW_STATE_FOCUSED of type GdkWindowState>

所以我实际上看到有一个 | 运算符,我认为应该可以用它做一些事情。类似于 state.get_flags()

根据PyGtk documentation,GdkWindowState是一组位标志。尝试将其转换为整数值并使用二进制 AND:

if Gdk.WindowState.FULLSCREEN & int(state):
    # ...

实际上 GdkWindowState class 很可能直接支持这个操作,或者有一些标准的方法来转换为整数。

您可以使用 print dir(state) 查看可用的字段和方法,并从那里进行调查。