不想在 listWidget 中点击/突出显示图标 [英] would like not clickable/highlighted icons in listWidget

查看:91
本文介绍了不想在 listWidget 中点击/突出显示图标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 Pyside2 中有 QListWidget,它有图标填充它.我不喜欢当鼠标点击它们时图标呈现灰色的外观.有没有办法禁用此操作?我会附上一张图片.

I have QListWidget in Pyside2 that has icons populating it. I dont like the icons taking on a shaded grey look when the mouse clicks them. Is there a way to disable this action? I will include a picture.

推荐答案

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

You have to use a delegate that disables the QStyle::State_Selected flag:

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 标志:

Another option is to disable the Qt::ItemIsSelectable flag of the 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_())

这篇关于不想在 listWidget 中点击/突出显示图标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆