【问题标题】:Don’t close Dialog on pressing OK button of QMessageBox按下 QMessageBox 的 OK 按钮时不要关闭对话框
【发布时间】:2014-12-10 09:38:19
【问题描述】:

我已经像这样调用了 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()

当我单击消息框的确定按钮时,它也会关闭我的对话框。如何避免这种情况?

【问题讨论】:

  • 您必须提供对话框的代码。消息框不会是罪魁祸首。您可能正在“accept()”插槽中调用消息框,或者可能将其连接到信号,然后通过不调用对话框插槽来真正接受它。
  • 如果对话框不应该关闭,那么应该采取什么行动?
  • @Pratham 消息框应该刚刚关闭,用户可以继续处理对话框
  • @SebastianLange 添加代码
  • 代码对我有用。您的代码还有更多内容吗?

标签: qt pyside qmessagebox


【解决方案1】:

您的代码示例(稍作修改以使其运行)对我有用:

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_()

您可以在消息框上按确定,对话框不会关闭。您可能也在做其他导致对话框关闭的事情。

【讨论】:

  • 是的,我也在做其他事情。所以我更新了问题并找到了解决方案
  • @Patrick:耻辱,你没有写出它是什么。有类似的问题,不知道是什么打击了我。
【解决方案2】:

像这样使用 QMessageBox

QMessageBox.critical(self.view, "Error", "System Failure")

【讨论】:

  • 此答案仅适用于您的特殊情况,问题中没有充分记录。其他人很可能需要 QMessageBox 的其他参数。因为这个问题对 SO 来说不是一个好问题,因为其他人不太可能从中学到很多东西。
猜你喜欢
  • 2013-04-15
  • 2019-01-30
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多