在PyQt / PySide中自己绘制错误对话框图标

时间:2014-03-18 17:00:49

标签: python qt pyqt wxpython pyside

我正在尝试实现类似于带有附加功能的错误消息框的对话框。在QMessageBox.Critical中使用QMessageBox时,我想绘制系统提供的相同位图。

在wxPython中我会这样做:

self.error_bitmap = wx.ArtProvider.GetBitmap(wx.ART_ERROR, wx.ART_MESSAGE_BOX)
self.error_bitmap_ctrl = wx.StaticBitmap(self)
self.error_bitmap_ctrl.SetBitmap(self.error_bitmap)

我在Qt中寻找类似的东西。我尝试使用QStyle.SP_MessageBoxCriticalQIcon.fromTheme("dialog-error"),但没有成功。我似乎无法理解类结构来获取一些我实际上可以放在QLabel旁边的窗口的小部件。

1 个答案:

答案 0 :(得分:3)

Qt使用的各种内置图标可以通过QStyle.standardIcon方法检索。

QMessageBox类还有一个方法来提取每个QMessageBox.Icon的像素图,但它不是公共API的一部分。这是它的PyQt / PySide端口:

def messageBoxIcon(mbicon, widget=None):
    if widget is not None:
        style = widget.style()
    else:
        style = QtGui.QApplication.style()
    size = style.pixelMetric(
        QtGui.QStyle.PM_MessageBoxIconSize, None, widget)
    if mbicon == QtGui.QMessageBox.Information:
        icon = style.standardIcon(
            QtGui.QStyle.SP_MessageBoxInformation, None, widget)
    elif mbicon == QtGui.QMessageBox.Warning:
        icon = style.standardIcon(
            QtGui.QStyle.SP_MessageBoxWarning, None, widget)
    elif mbicon == QtGui.QMessageBox.Critical:
        icon = style.standardIcon(
            QtGui.QStyle.SP_MessageBoxCritical, None, widget)
    elif mbicon == QtGui.QMessageBox.Question:
        icon = style.standardIcon(
            QtGui.QStyle.SP_MessageBoxQuestion, None, widget)
    else:
        icon = QtGui.QIcon()
    if not icon.isNull():
        return icon.pixmap(size, size)
    return QtGui.QPixmap()