【问题标题】:PyQt: Add icon to right side of QListWidget itemPyQt:将图标添加到 QListWidget 项的右侧
【发布时间】:2023-03-19 18:05:01
【问题描述】:

在 QlistWidget 中,当使用 listItem.setIcon(qIcon) 时,图标放在列表项的左侧。如何使它显示在右侧,如下所示?

还有一个问题。如何从项目中删除图标?

【问题讨论】:

    标签: qt pyqt icons qlistwidget


    【解决方案1】:

    为此,您需要提供自己的项目委托,该委托可以根据需要绘制项目数据。

    QAbstractItemView::setItemDelegate()

    您可能会使用QStyledItemDelegate 作为您的基类,并让其paint() 处理除Qt::DecorationRole(图标)之外的所有方面并自己绘制。

    【讨论】:

    • 我明白了。感谢您的回答。我之前没有创建自定义委托,所以我不确定如何在 PyQt 中使用它,有没有类似的参考资料可以看一下?
    • 我自己没用过PyQt,但我猜你是用标准的Python子类化语法,然后用像def paint(self, painter, option, index):这样的函数签名覆盖paint方法@
    • 我想我找到了一个很好的例子。 saltycrane.com/blog/2008/01/pyqt4-qitemdelegate-example-with 但问题是我的列表小部件是在 Qt Designer 中创建的,我不确定如何将其无缝替换为委托版本!
    • 您不需要替换视图,您只需要创建您的委托类的对象并在视图对象上调用setItemDelegate()。如果您查看链接的示例,那么lv = QListView() 行基本上就是从设计器文件生成的代码将完成的操作,有关创建和设置委托的行也适用于您
    【解决方案2】:

    这可以通过一个简单的自定义 item-delegate 轻松完成:

    class ItemDelegate(QtGui.QStyledItemDelegate):
        def paint(self, painter, option, index):
            option.decorationPosition = QtGui.QStyleOptionViewItem.Right
            super(ItemDelegate, self).paint(painter, option, index)
    
    class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
        def __init__(self):
            ...
            self.delegate = ItemDelegate()
            self.listWidget.setItemDelegate(self.delegate)
    

    要从项目中删除图标,只需将其设置为空QIcon

    listItem.setIcon(QtGui.QIcon())
    

    【讨论】:

    • 像魅力一样工作!感谢您的详尽回答!
    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 2016-06-29
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多