【问题标题】:Draw error dialog icon myself in PyQt / PySide在 PyQt / PySide 中自己绘制错误对话框图标
【发布时间】:2014-03-18 17:00:49
【问题描述】:

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

在 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 旁边的窗口上。

【问题讨论】:

    标签: python qt pyqt wxpython pyside


    【解决方案1】:

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

    【讨论】:

    • 我错过了style = QtGui.QApplication.style() 部分。谢谢!
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 2021-04-29
    • 2019-01-12
    • 1970-01-01
    • 2017-04-08
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多