我使用的PyQt 4.8.3创建一个对话框有两个QListWidgets都允许多个选择。
我觉得,如果这些QListWidgets被激活时,选择的项目以蓝色高亮显示,只有当QListWidget具有焦点,没有焦点的亮点是浅灰色。
我还发现,如果QListWidgets被禁用,选定的项目以蓝色尽管缺乏重点突出。
当用户从一个列表到另一个,他们会觉得这很混乱。
作为一个开发者,我觉得浅灰色/消沉,蓝/禁止的行为不可取。 我将在修改欣赏他们的任何意见。
我已经通过了文档的看着QListWidget,而QListView和QAbstractView没有找到适用什么,我也通过看样式表文件,而无需任何运气。
我想在这里使用样式表。 在这个例子中,在这个选定的项目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_())
最简单的方法是改变QPalette (如果样式表不为你工作)。
只需设置调色板而QListView你想改变(只)值。
做这样的事情:
QPalette customPalette;
QPalette orginalPallete = listView->palette();
customPalette->setBrush(QPalette::Disabled, QPalette::Highlight,
orginalPallete.brush(QPalette::Active, QPalette::Highlight));
listView->setPalette(customPalette);
我建议阅读调色板财产是如何工作的(所以你需要设置只有你想改变的东西从父母和QApplication的合并值)。
您也可以通过改变调色板的QApplication改变全球这个颜色。
QItemDelegate可以用来提供自定义显示特征。 我希望这会帮助你。 您可以重新实现
virtual void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
文章来源: How do I achieve consistent highlighting of QListWidget items across widget states?