pyqt qlistwidget 设置当前行背景颜色
时间: 2024-09-14 15:06:14 浏览: 42
PyQt QListWidget修改列表项item的行高方法
PyQt 是一个用于开发图形用户界面的 Python 绑定库,它是基于 Qt 库的。`QListWidget` 是 PyQt 中用于显示一个项列表的控件。要设置 `QListWidget` 中当前行的背景颜色,可以通过覆写 `QListWidget` 的绘制事件来实现。
具体步骤如下:
1. 继承 `QListWidget` 类创建一个自定义的 `ListWidget` 类。
2. 重写 `paintEvent` 方法,在该方法中使用 `QStyle` 的 `drawControl` 函数来绘制当前选中项。
3. 使用 `QPalette` 获取当前选中项的背景颜色,并根据需要设置为自定义颜色。
4. 在你的 GUI 应用中使用这个自定义的 `ListWidget`。
以下是示例代码:
```python
from PyQt5.QtWidgets import QListWidget, QWidget, QListWidgetItem, QVBoxLayout
from PyQt5.QtGui import QPalette
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush
class CustomListWidget(QListWidget):
def __init__(self, parent=None):
super(CustomListWidget, self).__init__(parent)
def paintEvent(self, event):
painter = super(CustomListWidget, self).paintEvent(event)
option = self.viewOptions()
style = self.style()
for row in range(self.count()):
item = self.item(row)
if item and item isSelected():
option.palette.setColor(QPalette.Highlight, Qt.red) # 设置当前选中项的背景颜色为红色
style.drawControl(QStyle.CE_LISTVIEW, option, painter, self)
break
return painter
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.customListWidget = CustomListWidget(self)
self.customListWidget.addItem(QListWidgetItem("Item 1"))
self.customListWidget.addItem(QListWidgetItem("Item 2"))
self.customListWidget.addItem(QListWidgetItem("Item 3"))
layout = QVBoxLayout()
layout.addWidget(self.customListWidget)
self.setLayout(layout)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
```
在这段代码中,我们创建了一个 `CustomListWidget` 类,它覆写了 `paintEvent` 方法,并在该方法中设置当前选中项的背景颜色为红色。
阅读全文