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

krl*_*mlr 4 ubuntu dialog qt4 pyqt pyqt4

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

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上运行,那就太好了。

我感谢任何提示。提前致谢。

ekh*_*oro 6

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

在Linux KDE上使用默认的 windowFlags会生成一个带有上下文,最大化,最小化和关闭按钮的对话框。但是在Windows XP中,只有一个上下文和关闭按钮。

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

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

(请注意,组合标志时,必须使用按位OR运算符|。在示例中,将使用布尔OR运算符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_())
Run Code Online (Sandbox Code Playgroud)