python - 如何实现跨小部件状态的 QListWidget 项目的一致突出显示?

标签 python qt pyqt pyside

我正在使用 PyQT 4.8.3 创建一个带有两个 QListWidgets 的对话框,它们都允许多项选择。

  1. 我发现,如果启用了这些 QListWidget,只有当 QListWidget 有焦点时,所选项目才会以蓝色突出显示,没有焦点时突出显示为浅灰色。

  2. 我还发现,如果 QListWidgets 被禁用,尽管没有焦点,所选项目仍会以蓝色突出显示。

enter image description here

当用户从一个列表转到另一个列表时,他们会发现这非常令人困惑。

作为一名开发人员,我发现浅灰色/不专心、蓝色/禁用行为是不可取的。如果有任何关于修改它们的建议,我将不胜感激。

我查看了 QListWidget, QListView and QAbstractView 的文档在没有找到任何适用的情况下,我还查看了 stylesheet没有任何运气的文档。

最佳答案

我会在这里使用样式表。在此示例中,此 QListWidget 中的选定项目将以蓝色突出显示,当 QListWidget 被禁用或没有焦点时,它们将变为灰色:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtCore, QtGui

class myWindow(QtGui.QWidget):

    def __init__(self, parent=None):
        super(myWindow, self).__init__(parent)

        self.setStyleSheet( """ QListWidget:item:selected:active {
                                     background: blue;
                                }
                                QListWidget:item:selected:!active {
                                     background: gray;
                                }
                                QListWidget:item:selected:disabled {
                                     background: gray;
                                }
                                QListWidget:item:selected:!disabled {
                                     background: blue;
                                }
                                """
                                )

        self.listWidget = QtGui.QListWidget(self)
        self.listWidget.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)

        self.button = QtGui.QPushButton(self)
        self.button.setText("Disable the list!")
        self.button.clicked.connect(self.on_button_clicked)

        self.layout = QtGui.QVBoxLayout(self)
        self.layout.addWidget(self.button)
        self.layout.addWidget(self.listWidget)

        for itemNumber in range(5):
            item = QtGui.QListWidgetItem(self.listWidget)
            item.setText("Item {0}".format(itemNumber))
            self.listWidget.addItem(item)


    @QtCore.pyqtSlot()
    def on_button_clicked(self):
        enable = False if self.listWidget.isEnabled() else True

        self.listWidget.setEnabled(enable)

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('myWindow')

    main = myWindow()
    main.show()

    sys.exit(app.exec_())

关于python - 如何实现跨小部件状态的 QListWidget 项目的一致突出显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14330642/

相关文章:

python - 如何使用 Flask 中的 DropDownMenu 获取 MongoDB 中的所有 IdObject

python - Python 中只将一个变量传递给函数

python - PyQt5 连接在这种情况下不起作用 : item cannot be converted to PyQt5. QtCore.QObject

python - 如何在 Python 中暂停多处理进程?

python - 如何为 tensorflow 批量输入?

python - 使用 zxJDBC 调用过程时参数数量或类型错误

qt - 多模型 QML map View

c++ - 如何将 std::vector<uint8_t> 转换为 QByteArray?

c++ - 在 Qt GUI 中加载和显示图像

python - 如何获取QwebView当前的url?