pyQt5 更改主窗口标志
pyQt5 change MainWindow Flags
我使用 python 3.4、pyQt5 和 Qt designer(Winpython 发行版)。我喜欢由设计师制作 GUI 并使用 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_())
主窗口出现(没有错误)但未应用标志。我想这是因为我要求在创建属性后更改 Windows 属性。现在,问题是:如何不直接修改 Ui_MainWindow 来做到这一点?可以在 Qt 设计器中更改标志吗?谢谢
每次调用setWindowFlags
都会完全覆盖当前设置,因此您需要一次设置所有标志。此外,您必须包含 CustomizeWindowHint
标志,否则所有其他提示都将被忽略。以下内容可能适用于 Windows:
self.setWindowFlags(
QtCore.Qt.Window |
QtCore.Qt.CustomizeWindowHint |
QtCore.Qt.WindowTitleHint |
QtCore.Qt.WindowCloseButtonHint |
QtCore.Qt.WindowStaysOnTopHint
)
但是,这不太可能适用于所有平台。 "Hint" 确实就是这个意思。 Window 经理可以完全自由地忽略这些标志,并且不能保证他们都会以相同的方式行事。
PS:
无法在 Qt Designer 中设置 window 标志。
我会提出一个不同的解决方案,因为它保留了现有的标志。这样做的原因是不要与 UI-specific 预设混合(就像对话框默认没有“最大化”或“最小化”按钮)。
self.setWindowFlags(self.windowFlags() # reuse initial flags
& ~QtCore.Qt.WindowContextHelpButtonHint # negate the flag you want to unset
)
我使用 python 3.4、pyQt5 和 Qt designer(Winpython 发行版)。我喜欢由设计师制作 GUI 并使用 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_())
主窗口出现(没有错误)但未应用标志。我想这是因为我要求在创建属性后更改 Windows 属性。现在,问题是:如何不直接修改 Ui_MainWindow 来做到这一点?可以在 Qt 设计器中更改标志吗?谢谢
每次调用setWindowFlags
都会完全覆盖当前设置,因此您需要一次设置所有标志。此外,您必须包含 CustomizeWindowHint
标志,否则所有其他提示都将被忽略。以下内容可能适用于 Windows:
self.setWindowFlags(
QtCore.Qt.Window |
QtCore.Qt.CustomizeWindowHint |
QtCore.Qt.WindowTitleHint |
QtCore.Qt.WindowCloseButtonHint |
QtCore.Qt.WindowStaysOnTopHint
)
但是,这不太可能适用于所有平台。 "Hint" 确实就是这个意思。 Window 经理可以完全自由地忽略这些标志,并且不能保证他们都会以相同的方式行事。
PS:
无法在 Qt Designer 中设置 window 标志。
我会提出一个不同的解决方案,因为它保留了现有的标志。这样做的原因是不要与 UI-specific 预设混合(就像对话框默认没有“最大化”或“最小化”按钮)。
self.setWindowFlags(self.windowFlags() # reuse initial flags
& ~QtCore.Qt.WindowContextHelpButtonHint # negate the flag you want to unset
)