Pyside2 第二个窗口(QDialog)关闭主窗口

问题描述 投票:0回答:3
import sys

from PySide2.QtCore import QFile
from PySide2.QtWidgets import QApplication, QMainWindow
from PySide2.QtUiTools import QUiLoader


class MyMainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        loader = QUiLoader()
        self.ui = loader.load("mainWindow.ui", self)

        self.ui.pushButton_call_dialog.clicked.connect(self.call_dialog)
        self.ui.close()

        self.ui.show()


    def call_dialog(self):
        loader = QUiLoader()
        self.dialog = loader.load("dialog.ui")

        self.dialog.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    window = MyMainWindow()
    window.show
    sys.exit(app.exec_())

大家好, 知道为什么第二个(对话框)窗口关闭整个应用程序吗? 当然,这不是崩溃,因为我收到一条消息:

进程已完成,退出代码为 0

感谢您的帮助

python pyside2
3个回答
0
投票

您可以在单独的类上处理 QDialog,然后使它们仅进行交互,结构可能会稍微改变,但您可以看看这是否是一个可行的答案:

import sys
from PySide2.QtWidgets import *

class MyWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        button = QPushButton("Dialog")
        button.clicked.connect(self.open_dialog)
        self.setCentralWidget(button)

    def open_dialog(self):
        dialog = MyDialog()
        dialog.show()
        dialog.exec_()


class MyDialog(QDialog):
    def __init__(self):
        QDialog.__init__(self)

        button = QPushButton("Close")
        button.clicked.connect(self.close_dialog)

        layout = QHBoxLayout()
        layout.addWidget(button)
        self.setLayout(layout)

    def close_dialog(self):
        self.close()

if __name__ == "__main__":
    app = QApplication()
    m = MyWindow()
    m.show()
    sys.exit(app.exec_())

请注意,您应该在每个课程中包含

setUp
步骤。 希望有帮助。


0
投票

将对话框放入单独的类中都不起作用。 每次调用 Dialog.close() 事件时,都会关闭整个应用程序。

对我有用的是使用 hide() 代替


0
投票

这篇文章似乎很旧了。除了 hide() 的解决方法之外,还有其他解决方案或修复吗? 此致, 卡斯滕

© www.soinside.com 2019 - 2024. All rights reserved.