Python pyQt5更改主窗口标志

Python pyQt5更改主窗口标志,python,pyqt5,qt-designer,flags,qmainwindow,Python,Pyqt5,Qt Designer,Flags,Qmainwindow,我使用Python3.4、pyQt5和Qt设计器(Winpython发行版)。我喜欢由designer制作GUI并使用setupUi在python中导入它们的想法。我能够显示主窗口和Qdialog。然而,现在我想设置我的主窗口,总是在顶部,只有关闭按钮。我知道这可以通过设置Windows标志来实现。我试图做到以下几点: from PyQt5 import QtCore, QtGui, QtWidgets import sys class MainWindow(QtWidgets.QMainWin

我使用Python3.4、pyQt5和Qt设计器(Winpython发行版)。我喜欢由designer制作GUI并使用setupUi在python中导入它们的想法。我能够显示主窗口和Qdialog。然而,现在我想设置我的主窗口,总是在顶部,只有关闭按钮。我知道这可以通过设置Windows标志来实现。我试图做到以下几点:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.setWindowFlags(QtCore.Qt.WindowCloseButtonHint | QtCore.Qt.WindowMinimizeButtonHint)
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    form = MainWindow()
    form.show()
    sys.exit(app.exec_())

将显示主窗口(无错误),但未应用标志。我想这是因为我要求在创建Windows之后更改它的属性。现在,问题是:我如何在不直接修改Ui_主窗口的情况下做到这一点?是否可以在Qt designer中更改标志?谢谢

每次调用
setWindowFlags
都将完全覆盖当前设置,因此您需要一次设置所有标志。此外,必须包含
customizeWindowint
标志,否则将忽略所有其他提示。以下内容可能适用于Windows:

    self.setWindowFlags(
        QtCore.Qt.Window |
        QtCore.Qt.CustomizeWindowHint |
        QtCore.Qt.WindowTitleHint |
        QtCore.Qt.WindowCloseButtonHint |
        QtCore.Qt.WindowStaysOnTopHint
        )
然而,这不太可能在所有平台上都起作用。“暗示”真的就是这个意思。窗口管理器完全可以忽略这些标志,并且不能保证它们的行为方式都是相同的

附言:


无法在Qt Designer中设置窗口标志。

我将提出一个不同的解决方案,因为它保留现有标志。这样做的原因是为了不与特定于UI的预设混在一起(比如对话框默认没有“最大化”或“最小化”按钮)

self.setWindowFlags(self.windowFlags() # reuse initial flags
    & ~QtCore.Qt.WindowContextHelpButtonHint # negate the flag you want to unset
)