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 将尽可能恢复到保存状态时的状态,同时确保它始终可见,即使屏幕设置已更改。
我正在尝试制作一个配置文件,其中包含有关 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 将尽可能恢复到保存状态时的状态,同时确保它始终可见,即使屏幕设置已更改。