不希望 listWidget 中有 clickable/highlighted 个图标

would like not clickable/highlighted icons in listWidget

我在 Pyside2 中有 QListWidget,其中填充了图标。我不喜欢图标在鼠标单击时呈现灰色阴影。有没有办法禁用此操作?我会附上一张照片。

您必须使用禁用 QStyle::State_Selected 标志的委托:

from PySide2 import QtCore, QtGui, QtWidgets

class StyledItemDelegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        option.state &= ~QtWidgets.QStyle.State_Selected
        super(StyledItemDelegate, self).initStyleOption(option, index)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = QtWidgets.QListWidget()
    delegate = StyledItemDelegate(w) # <---
    w.setItemDelegate(delegate)      # <---
    w.setViewMode(QtWidgets.QListView.IconMode)
    w.setIconSize(QtCore.QSize(128, 128))
    w.setResizeMode(QtWidgets.QListView.Adjust)

    for _ in range(20):
        it = QtWidgets.QListWidgetItem()
        it.setIcon(QtGui.QIcon("light.png"))
        w.addItem(it)
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

另一种选择是禁用 QListWidgetItem 的 Qt::ItemIsSelectable 标志:

from PySide2 import QtCore, QtGui, QtWidgets

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle("fusion")
    w = QtWidgets.QListWidget()
    w.setViewMode(QtWidgets.QListView.IconMode)
    w.setIconSize(QtCore.QSize(128, 128))
    w.setResizeMode(QtWidgets.QListView.Adjust)

    for i in range(20):
        it = QtWidgets.QListWidgetItem(str(i))
        it.setIcon(QtGui.QIcon("light.png"))
        it.setFlags(it.flags() &~ QtCore.Qt.ItemIsSelectable) # <---
        w.addItem(it)
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())