хотел бы не кликабельные / подсвеченные иконки в listWidget - PullRequest
1 голос
/ 07 марта 2019

У меня есть QListWidget в Pyside2, в котором есть значки, заполняющие его.Мне не нравятся значки, приобретающие затененный серый цвет, когда мышь щелкает по ним.Есть ли способ отключить это действие?Я включу картинку.

enter image description here

1 Ответ

1 голос
/ 07 марта 2019

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