Вы должны использовать делегата, который отключает флаг 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_())
Другой вариант - отключить флаг Qt::ItemIsSelectable
для QListWidgetItem:
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_())