在PyQt4对话框中添加一个“最大化”按钮,并使对话框位于父窗口的中心



我有一个带有大文本框的对话框。我希望用户能够最大化对话框。我已经尝试了以下选项(XML_EditorQDialog实例):

XML_Editor.setWindowFlags(QtCore.Qt.Window or QtCore.Qt.WindowMaximizeButtonHint)--显示"最大化"按钮,但不再以父为中心显示对话框

XML_Editor.setWindowFlags(QtCore.Qt.Dialog or QtCore.Qt.WindowMaximizeButtonHint or QtCore.Qt.CustomizeWindowHint)——无作用

现在我的问题是:我该如何实现"最大化"按钮的显示和对话框弹出的中心相对于父对象?网络上的大多数资源似乎都集中在如何去掉"最大化"按钮上。有什么相反的想法吗?

主要目标是Ubuntu 10.04(默认配置),如果它也能在Windows和Mac上运行,那就太好了。

我很感激任何提示。提前谢谢。

主平台上的各种窗口管理器的行为都会有所不同,因此很难找到一个在所有情况下都能100%保证工作的解决方案。

在Linux KDE上使用默认窗口标志会生成一个带有上下文、最大化、最小化和关闭按钮的对话框;但在WindowsXP中,只有一个上下文和关闭按钮。

对于大多数平台,似乎至少需要设置WindowSystemMenuHintWindowMaximizeButtonHint标志,以确保存在最大化按钮。

为了确保对话框保持在父窗口的中心,只需在对话框的构造函数中传递对父窗口的引用。

(请注意,在组合标志时,必须使用位OR运算符|。在您的示例中,您使用boolean ORoperator or,它将选择第一个非零值,但忽略其他值)。

以下示例为我在Linux KDE和Windows XP上生成了一个带有最大化按钮的居中对话框:

from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.button = QtGui.QPushButton('Show Dialog', self)
        self.button.clicked.connect(self.handleButton)
        layout = QtGui.QHBoxLayout(self)
        layout.addWidget(self.button)
    def handleButton(self):
        dialog = QtGui.QDialog(self)
        dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        dialog.setWindowFlags(dialog.windowFlags() |
                              QtCore.Qt.WindowSystemMenuHint |
                              QtCore.Qt.WindowMinMaxButtonsHint)
        dialog.resize(160, 120)
        dialog.show()
if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    window.resize(320, 240)
    sys.exit(app.exec_())

尝试获取父窗口的几何图形,然后将对话框移动到其中心,类似于:

QRect pw = parent_widget->getGeometry();
XML_Editor.move(pw.center() - XML_Editor->rect().center());

最新更新