QListWidgetItem返回错误的背景颜色

2024-03-29 06:09:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想更改QListWidgetItem背景和前景(文本)颜色的alpha。我需要它来实现列表中的搜索,如果与QLineEdit值不匹配,则列表中的项目将灰显。我通过以下方式获得项目背景色(前景相同):

for row in range(self.mylist.count()):
    color = self.mylist.item(row).background().color()
    print(color.name())

但是总是得到#000000。已经检查了颜色的alpha(使用color.alpha()),它始终是255。当我用新的alpha改变颜色并用self.mylist.item(row).setBackground(color)应用它时,背景变黑。也许我弄错颜色了

最小可复制示例(双击项目):

from PyQt5 import QtWidgets

def getColor(self):
    for row in range(mylist.count()):
        color = mylist.item(row).background().color()
        print(color.name())
        print(color.alpha())


app = QtWidgets.QApplication([])

mylist = QtWidgets.QListWidget()

item=QtWidgets.QListWidgetItem()
item.setText("test")
mylist.addItem(item)
mylist.show()

mylist.doubleClicked.connect(getColor)

app.exec_()

Tags: 项目selfalpha列表for颜色itemcolor
1条回答
网友
1楼 · 发布于 2024-03-29 06:09:44

背景的QBrush默认情况下QListWidgetItem为空,因此不会使用绘制,也就是说,不会绘制背景色,因此默认颜色是视图的背景色

对于前景,同样的情况也会发生,但它不是不绘制前景,而是使用视图调色板的文本颜色

因此,如果要获取背景色和文本,如果QBrush为空,则必须使用视图调色板:

from PyQt5 import QtCore, QtWidgets


def getColor(self):
    for row in range(mylist.count()):
        it = mylist.item(row)

        brush = it.background()
        if brush.style() == QtCore.Qt.NoBrush:
            brush = mylist.palette().base()
        color = brush.color()
        color.setAlpha(100 if color.alpha() == 255 else 255)
        brush.setColor(color)
        it.setBackground(brush)

        brush = it.foreground()
        if brush.style() == QtCore.Qt.NoBrush:
            brush = mylist.palette().text()
        color = brush.color()
        color.setAlpha(100 if color.alpha() == 255 else 255)
        brush.setColor(color)
        it.setForeground(brush)


app = QtWidgets.QApplication([])

mylist = QtWidgets.QListWidget()
for i in range(5):
    item = QtWidgets.QListWidgetItem()
    item.setText("test ")
    mylist.addItem(item)
mylist.show()

mylist.doubleClicked.connect(getColor)

app.exec_()

相关问题 更多 >