2

我好像撞到了一堵砖墙。无论我做什么,创建一个严重错误消息框似乎都不起作用。这是我迄今为止尝试过的:

flags = QtGui.QMessageBox.StandardButton.Abort
flags |= QtGui.QMessageBox.StandardButton.Ignore

result = QtGui.QMessageBox.critical(
    self,
    'CRITICAL ERROR',
    'Error Message',
    flags
    )

取自本教程(我知道旧的,但到目前为止它很有帮助)。但是,这样做会引发以下错误:

使用错误的参数类型调用“PySide.QtGui.QMessageBox.critical”:

PySide.QtGui.QMessageBox.critical(CreateMessage,str,StandardButtons)

支持的签名:

PySide.QtGui.QMessageBox.critical(PySide.QtGui.QWidget,unicode,unicode,PySide.QtGui.QMessageBox.StandardButtons = QMessageBox.Ok,PySide.QtGui.QMessageBox.StandardButton = NoButton)

PySide.QtGui.QMessageBox.critical(PySide.QtGui.QWidget,unicode,unicode,PySide.QtGui.QMessageBox.StandardButton,PySide.QtGui.QMessageBox.StandardButton)

我还尝试了以下方法:

result = QtGui.QMessageBox.critical(
    self,
    'CRITICAL ERROR',
    'Error Message',
    QtGui.QMessageBox.StandardButton.Abort
    )

# Or this....

result = QtGui.QMessageBox.critical(
    self,
    'CRITICAL ERROR', 
    'Error Message',
    QtGui.QMessageBox.Abort
    )

这些似乎都不能正常工作。如何创建严重错误消息框?

4

2 回答 2

3

下面的简单示例

import sys
from PySide import QtGui
app = QtGui.QApplication(sys.argv)
a=QtGui.QMessageBox.critical(None,'Error!',"Error Message!", QtGui.QMessageBox.Abort)
于 2015-04-03T02:03:27.557 回答
2

这是 Qt.Gitorious 的一个例子

from PySide import QtGui, QtCore
import sys

class Dialog(QtGui.QDialog):
    MESSAGE = QtCore.QT_TR_NOOP("<p>Message boxes have a caption, a text, and up to "
                                "three buttons, each with standard or custom texts.</p>"
                                "<p>Click a button or press Esc.</p>")

    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.criticalLabel = QtGui.QLabel()
        self.criticalLabel.setFrameStyle(QtGui.QFrame.Sunken | QtGui.QFrame.Panel)
        self.criticalButton = QtGui.QPushButton(self.tr("QMessageBox.critica&l()"))

        layout = QtGui.QGridLayout()
        layout.addWidget(self.criticalButton, 10, 0)
        layout.addWidget(self.criticalLabel, 10, 1)
        self.setLayout(layout)

        self.connect(self.criticalButton, QtCore.SIGNAL("clicked()"), self.criticalMessage)


    def criticalMessage(self):    
        reply = QtGui.QMessageBox.critical(self, self.tr("QMessageBox.showCritical()"),
                                               Dialog.MESSAGE, QtGui.QMessageBox.Abort|
                                               QtGui.QMessageBox.StandardButton.Retry|
                                               QtGui.QMessageBox.StandardButton.Ignore)
        if reply == QtGui.QMessageBox.Abort:
            self.criticalLabel.setText(self.tr("Abort"))
        elif reply == QtGui.QMessageBox.Retry:
            self.criticalLabel.setText(self.tr("Retry"))
        else:
            self.criticalLabel.setText(self.tr("Ignore"))

if __name__ == '__main__':  
    app = QtGui.QApplication(sys.argv)
    dialog = Dialog()
    sys.exit(dialog.exec_())        

要回答您的问题,您可以查看文档:

static PySide.QtGui.QMessageBox.critical(parent, title, text[, buttons=QMessageBox.Ok[, defaultButton=NoButton]])

在示例中,parent = self,title = self.tr("QMessageBox.showCritical()"),text = Dialog.MESSAGE,buttons = QtGui.QMessageBox.Abort | QtGui.QMessageBox.StandardButton.Retry | QtGui.QMessageBox.StandardButton.Ignore

tr 只是一些用于设置翻译的 Qt 函数,基本上它是一个字符串。我真的不能告诉你你做错了什么,看错误信息,它似乎解析错误。可能是因为您将值分配给标志的方式。

该示例还显示了如何处理关键对话的结果,这似乎很有用。

于 2013-08-09T21:23:07.063 回答