如何使用PySide创建严重错误消息?

时间:2013-08-09 20:41:46

标签: python-3.x pyside

我好像在打砖墙。无论我做什么,创建一个关键错误消息框似乎似乎没有工作。这是我到目前为止所尝试的内容:

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

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

取自this tutorial(我知道,但到目前为止它有用)。但是,这样做会出现以下错误:

  使用错误的参数类型调用'pSide.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
    )

这些似乎都没有正常工作。如何创建关键错误消息框?

2 个答案:

答案 0 :(得分:3)

下面的简单示例

import sys
from PySide import QtGui
app = QtGui.QApplication(sys.argv)
a=QtGui.QMessageBox.critical(None,'Error!',"Error Message!", QtGui.QMessageBox.Abort)

答案 1 :(得分:2)

Here's an example from 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_())        

回答您的问题you can check the documentation:

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函数,基本上是一个字符串。我无法真正告诉你你做错了什么,看错误信息,似乎解析了错误。可能是因为你为标志赋值的方式。

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