Python - 如何从QListWidgetItem获取backgroundColor

时间:2016-12-15 14:16:21

标签: python python-3.x pyqt pyqt5

我想从QList Widget获取项目并将其添加到QListWidgetItem var中,一切都很好,但之后我需要这个项目的背景颜色并且:

    item = self.Listbox.takeItem(i)
    print(item.backgroundColor)

为此,我遇到了backgroundColor 属性不存在的错误

在PyQt4中存在属性:

http://pyqt.sourceforge.net/Docs/PyQt4/qlistwidgetitem.html#backgroundColor

但是我可以在PyQt5上使用什么?

-

print的输出(dir(item)):

enter image description here

2 个答案:

答案 0 :(得分:2)

简短回答是

item.background().color().getRgb()

获取RGB值,例如(0,0,0,255)

更长的答案是backgroundColor()现已过时,请参阅http://doc.qt.io/qt-4.8/qlistwidgetitem-obsolete.html

  

(已废弃)QColor backgroundColor()const

所以你必须使用background()获得QBrush然后使用color()获得QColor然后获取RGB或你想要的任何内容http://doc.qt.io/qt-4.8/qcolor.html

答案 1 :(得分:0)

#Get backgroundColor from QListWidgetItem
#This is the example code for Get backgroundColor from QListWidgetItem
#If your are not expecting this answer, sorry.
#Thanks, Subin Gopi

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore

class MyWidget(QtGui.QWidget):

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

        self.listWidget = QtGui.QListWidget(self)
        self.listWidget.setGeometry(QtCore.QRect(10, 10, 200, 150))
        self.listWidget.setObjectName ('listWidget')        
        self.resize(250, 200)

        self.listWidget.itemPressed.connect (self.getColor)        
        self.addItems ()


    def addItems (self) :
        itemList        = {'Apple':'red', 'Orange':'#ff5500', 'Grape':'blue', 'Bean':'green', 'Banana':'yellow'}
        for eachItem in itemList :
            currentItem = QtGui.QListWidgetItem (self.listWidget)           

            #Set Color
            bgBrush     = QtGui.QBrush()
            bgBrush.setStyle(QtCore.Qt.SolidPattern)

            #Qt.GlobalColor
            bgBrush.setColor (QtGui.QColor(itemList[eachItem]))            
            #RGB Value 
            #bgBrush.setColor (QtGui.QColor(170, 85, 255))            
            currentItem.setBackground(bgBrush)

            fgBrush     = QtGui.QBrush()
            fgBrush.setColor (QtGui.QColor('black'))            
            currentItem.setForeground (fgBrush)

            #Set text
            currentItem.setText(eachItem)

    def getColor (self) :
        currentItem     = self.listWidget.selectedItems ()
        currentBrush    = currentItem[-1].background ()
        rgbColor        = currentBrush.color ().red (), currentBrush.color ().green (), currentBrush.color ().blue ()
        strColor        = currentBrush.color ().name ()

        print ('rgb- Color\t', rgbColor)
        print ('str- Color\t', strColor, '\n')

if __name__=='__main__':
    app = QtGui.QApplication(sys.argv)
    widget = MyWidget()
    widget.show()
    app.exec_()