PyQt5 - 获取当前 window 状态(是否最大化)

PyQt5 - get the current window state (Maximized or not)

我正在尝试制作一个配置文件,其中包含有关 window 大小、位置和关闭时状态的信息。再次打开时,它应该根据该信息恢复。 所以我使用 closeEvent 来触发这个函数:

cfg = ConfigParser()            # create config object   
def saveConfig(gui):
    winW = gui.centralwidget.frameGeometry().width()        # width of window
    winH = gui.centralwidget.frameGeometry().height()       # height of window
    
    cfg['window'] = {}                                      # window settings
    window = cfg['window']
    window['size'] = f"{winW},{winH}"                       # save current window size
    window['pos'] = f"{gui.x()},{gui.y()}"                  # save current window position
    
    with open(CONFIG_PATH, 'w') as file:                    # write config to file
         cfg.write(file)

这是 loadConfig 函数:

def loadConfig(gui):
    cfg.read(CONFIG_PATH)       # read config from CONFIG_PATH

    if 'window' in cfg:         # window settings
        window = cfg['window']    
        size = window.get('size').split(',')
        pos = window.get('pos').split(',')
        gui.resize(int(size[0]), int(size[1]))  # resize window to saved size
        gui.move(int(pos[0]), int(pos[1]))      # move window to save position
    else:
        gui.resize(1110,783)
        gui.move(398,94)

但是,如果 window 在最大化时关闭,它在启动后不会再次显示为最大化。只是在相同的大小和位置。

我读到你可以获得 windowState()。那么如果它是 Qt.WindowMaximized 就很容易比较它,但是当我使用 print(gui.centralwidget.windowState() 时它是 returns <PyQt5.QtCore.Qt.WindowStates object at 0x000001E7B1DBF970>。 有什么想法吗?

所有 Qt 枚举和标志都是整数或按位值,因此可以轻松将它们转换为“可读”格式:

    state = int(self.windowState())

即使不知道数值,也可以使用按位运算符直接比较标志:

    isMaximized = self.windowState() & QtCore.Qt.WindowMaximized

请注意,如果您想了解特定状态,只需调用相关的便利函数即可:isMaximized(), isMinimized() and isFullScreen()

最后,记得Qt已经提供了saveGeometry() and restoreGeometry(),它不仅存储了window的几何图形,还存储了widget当前所在的屏幕号和几何图形,保证了window 将尽可能恢复到保存状态时的状态,同时确保它始终可见,即使屏幕设置已更改。