Pyside2如何打开对话但不总是在顶部

时间:2017-11-17 15:03:22

标签: python pyside2

我创建了一个主框架和一个按钮,

然后单击按钮打开一个对话框,但对话框始终位于顶部,

我尝试使用setWindowsFlag但不起作用。

from PySide2.QtWidgets import QApplication,QMainWindow,QTabWidget,QWidget
from PySide2.QtWidgets import QMessageBox,QFileDialog,QErrorMessage
from PySide2 import QtCore, QtGui, QtWidgets
class UI_Test20(object):
    def setupUi(self, Test202):
        Test202.setObjectName("Test202")
        Test202.resize(100,100)
        self.centralwidget = QtWidgets.QWidget(Test202)
        self.centralwidget.setObjectName("centralwidget")
        self.pb = QtWidgets.QPushButton(self.centralwidget)
        self.pb.setText('push button!')
        Test202.setCentralWidget(self.centralwidget)
        self.pb.clicked.connect(self.btnClicked)
        self.retranslateUi(Test202)
        QtCore.QMetaObject.connectSlotsByName(Test202)

    def retranslateUi(self, Test202):
        Test202.setWindowTitle(QtWidgets.QApplication.translate("Test202", "MainWindow", None, -1))

    def btnClicked(self):
        ui = Ui_Dialog1(self)
        ui.show()

class Test20(QMainWindow, UI_Test20) :

    def __init__(self, parent):
        super(Test20, self).__init__(parent)
        self.setupUi(self)

和对话框代码

class Ui_Dialog1(QtWidgets.QDialog):

    def __init__(self, parent=None):
        super(Ui_Dialog1, self).__init__(parent)
        self.p = parent
        self.setupUi(self)

    def setupUi(self, Dialog1):
        Dialog1.setObjectName("Dialog1")
        Dialog1.resize(333, 173)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui = Test20(None)
    ui.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

问题是由于主窗口是QDialog的父窗口,因此必须将其删除,但如果完成,垃圾收集器将删除它,因此{{1}必须成为该类的成员:

QDialog

加号:正确的做法是不修改设计,因此我移动连接和与点击的按钮def btnClicked(self): self.ui = Ui_Dialog1() self.ui.show() 相关联的插槽,如果我们希望它在窗口关闭时关闭我们覆盖pb方法:

closeEvent()