为什么使用setWindowFlags后子对话框不能显示?

问题描述 投票:0回答:1

我想去掉右上角显示帮助对话框的标志,**所以我写了以下代码。

from PyQt5.QtWidgets import QWidget, QDialog, QApplication, QVBoxLayout
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtCore import Qt

class ChildWidget(QDialog):
    def __init__(self,parent=None):
        super().__init__(parent)
        self.resize(500,500)
        self.setWindowTitle('Child')
        self.setWindowFlags(Qt.CustomizeWindowHint|Qt.WindowCloseButtonHint)


class ParentWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(600,600)
        self.setWindowTitle('Parent')
        self.btn = QPushButton('show childDialog')
        self.child_widget = ChildWidget(self)
        layout = QVBoxLayout()
        layout.addWidget(self.btn)
        self.setLayout(layout)
        self.btn.clicked.connect(self.onClickedBtn)

    def onClickedBtn(self):
        self.child_widget.show()





if __name__=='__main__':
    import sys
    app = QApplication(sys.argv)
    w = ParentWidget()
    w.show()
    sys.exit(app.exec_())

当我点击按钮时,子对话框不能显示。

能否告诉我原因?

python pyqt pyqt5
1个回答
1
投票

一个窗口小部件必须至少满足以下特征之一。

  • 没有父节点,或者
  • 启用Qt::Window标志,或
  • 启用Qt::Dialog标志,或
  • 启用Qt::Tool标志。

在你的情况下,你没有任何理由让它不是一个窗口,而是一个部件的一部分,最好的解决方案是启用Qt::Dialog标志。

class ChildWidget(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.resize(500, 500)
        self.setWindowTitle("Child")
        self.setWindowFlags(
            Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowCloseButtonHint
        )
© www.soinside.com 2019 - 2024. All rights reserved.