我可以在小部件构造函数外更改窗口标志吗?

1 投票
1 回答
1192 浏览
提问于 2025-04-17 02:26

我正在尝试为我的Qt应用程序(使用PyQt)添加一个“全屏”选项。如果用户按下F11键,目标是将窗口最大化。

不过,我在去掉窗口标题栏时遇到了一些问题。通常,我会在__init__方法里写类似self.setWindowFlags(QtCore.Qt.CustomizeWindowHint)的代码,这样标题栏就不会显示(这是预期的效果)。但是,如果我启动Qt应用程序,然后等用户按F11,就像这样:

def keyPressEvent(self, event):
    if event.key() == QtCore.Qt.Key_F11:
        self.__doFullScreenCheck()

def __doFullScreenCheck(self):
    if self.maximizedFlg == False:
        self.__maximizeWindow()

def __maximizeWindow(self):
    ***self.setWindowFlags(QtCore.Qt.CustomizeWindowHint)***
    screen = QtGui.QDesktopWidget().screenGeometry()
    self.setGeometry(screen)
    self.maximizedFlg = True

__maximizeWindow中标记的那行代码放在__init__之外似乎会导致窗口完全消失。虽然应用程序仍在运行(在任务管理器中可以看到),但我无法通过Alt+Tab或任务管理器切换回去。

我该如何动态修改窗口的标志呢?

1 个回答

2

来自Qt文档关于QWidget::windowFlags的内容:

注意:这个函数在改变窗口的标志时,会调用setParent(),这会导致这个小部件被隐藏。你必须调用show()才能让这个小部件再次可见。

所以在self.setWindowFlags(...)之后加上self.show()就可以了。

撰写回答