pyQt5更改MainWindow标志

时间:2016-11-29 13:16:46

标签: python qt pyqt4 pyqt5

我使用python 3.4,pyQt5和Qt设计器(Winpython发行版)。我喜欢由设计师制作guis并使用setupUi在python中导入它们的想法。我能够显示MainWindows和QDialogs。但是,现在我想设置我的MainWindow,总是在顶部,只有关闭按钮。我知道这可以通过设置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_())

MainWindow显示(没有错误)但不应用Flags。我想这是因为我要求在已经创建后更改Windows属性。现在,问题是:我怎么能直接修改Ui_MainWindow呢?可以在Qt设计器中更改标志吗?谢谢

2 个答案:

答案 0 :(得分:8)

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

    self.setWindowFlags(
        QtCore.Qt.Window |
        QtCore.Qt.CustomizeWindowHint |
        QtCore.Qt.WindowTitleHint |
        QtCore.Qt.WindowCloseButtonHint |
        QtCore.Qt.WindowStaysOnTopHint
        )

但是,这种方法在所有平台上都不太可行。 “提示”确实意味着这一点。窗口管理器可以完全自由地忽略这些标志,并且不能保证它们都会以相同的方式运行。

PS:

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

答案 1 :(得分:2)

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

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