Qt 唐’;t按下QMessageBox的OK按钮时关闭对话框

Qt 唐’;t按下QMessageBox的OK按钮时关闭对话框,qt,pyside,qmessagebox,Qt,Pyside,Qmessagebox,我这样调用QMessageBox(): class Main(QDialog): def __init__(self): self.view = QUiLoader().load("app.ui", self) self.view.show() self.functionA() .... functionA(): try: .... except Exception:

我这样调用QMessageBox():

class Main(QDialog):
    def __init__(self):
        self.view = QUiLoader().load("app.ui", self)
        self.view.show()
        self.functionA()
    ....
    functionA():
        try:
            ....
        except Exception:
            QMessageBox.critical(self, "Error", "System Failure")

def main():
    app = QApplication(sys.argv)
    a = Main()
    sys.exit(app.exec_())

if __name__ == "__main__"
    main()
QMessageBox.critical(self.view, "Error", "System Failure")
当我点击消息框的OK按钮时,它也会关闭我的对话框。如何避免这种情况?

您的代码示例(稍微修改以使其运行)适合我:

from PySide.QtGui import *

class Main(QDialog):
    def __init__(self):
        super().__init__()
        self.show()
        self.functionA()

    def functionA(self):
        try:
            raise Exception()
        except Exception:
            QMessageBox.critical(self, "Error", "System Failure")

app = QApplication([])
a = Main()
app.exec_()

您可以按消息框上的“确定”,对话框将不会关闭。您可能正在执行其他操作,导致对话框关闭。

使用QMessageBox如下:

class Main(QDialog):
    def __init__(self):
        self.view = QUiLoader().load("app.ui", self)
        self.view.show()
        self.functionA()
    ....
    functionA():
        try:
            ....
        except Exception:
            QMessageBox.critical(self, "Error", "System Failure")

def main():
    app = QApplication(sys.argv)
    a = Main()
    sys.exit(app.exec_())

if __name__ == "__main__"
    main()
QMessageBox.critical(self.view, "Error", "System Failure")

您必须提供对话框的代码。messagebox不会是罪魁祸首。您可能正在“accept()”插槽中调用messagebox,或者可能已将其连接到信号,然后,不要通过不调用对话框槽来真正接受它。如果对话框不应该关闭,那么应该执行什么操作?@Pratham消息框应该关闭,用户可以继续工作dialog@SebastianLange添加代码代码代码对我有效。你的代码还有别的吗?是的,我也在做别的事情。所以我更新了问题并找到了解决方案well@Patrick字体真遗憾,你没有写下它是什么。我也有类似的问题,但不知道是什么打动了我。这个答案只适用于你的特殊情况,而你的特殊情况在问题中没有充分的记录。其他人很可能需要QMessageBox的其他参数。事实上,这个问题对SO来说不是一个好问题,因为其他人不太可能从中学到很多东西。