Ubuntu 将“最大化”按钮添加到PyQt4对话框,并使该对话框位于父窗口的中心

Ubuntu 将“最大化”按钮添加到PyQt4对话框,并使该对话框位于父窗口的中心,ubuntu,qt4,dialog,pyqt,pyqt4,Ubuntu,Qt4,Dialog,Pyqt,Pyqt4,我有一个带有大文本框的对话框。我希望用户能够最大化对话框。我已经尝试了以下选项(XML\u编辑器是一个QDialog实例): XML_Editor.setWindowFlags(QtCore.Qt.Window或QtCore.Qt.WindowMaximizeButtonHint)——显示最大化按钮,但不再与父级一起居中显示对话框 XML\u编辑器.setWindowFlags(QtCore.Qt.Dialog或QtCore.Qt.WindowMaximizeButtonHint或QtCore.

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

XML_Editor.setWindowFlags(QtCore.Qt.Window或QtCore.Qt.WindowMaximizeButtonHint)
——显示最大化按钮,但不再与父级一起居中显示对话框

XML\u编辑器.setWindowFlags(QtCore.Qt.Dialog或QtCore.Qt.WindowMaximizeButtonHint或QtCore.Qt.CustomizeWindowint)
--无效

现在我的问题是:如何实现最大化按钮被显示,对话框以父对象为中心弹出?网络上的大多数资源似乎都集中在如何去掉“最大化”按钮上。有没有办法达到相反的效果

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


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

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

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

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

在LinuxKDE上使用默认值生成一个带有上下文、最大化、最小化和关闭按钮的对话框;但在WindowsXP中,只有上下文和关闭按钮

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

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

(请注意,组合标志时,必须使用按位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_())

谢谢你的提示。在尝试此操作时,我意识到父窗口小部件不是主窗口。非常类似于。也没有真正的解决方案:-(感谢您对
|
以及代码的澄清。不幸的是,我的Unity版本仍然没有成功。似乎依赖于窗口管理器,如中所述。它可以可靠地使用
QtCore.Qt.window
作为窗口标志,因此我想我将使用此解决方案,因为我的代码库已经包含一个similar案例。我接受你的回答。用
Qt.Window替换
dialog.windowFlags()
。Window
对我在PyQt5的Manjaro肉桂店很有效。