Python 如何在QListWidgetItem周围绘制边框

Python 如何在QListWidgetItem周围绘制边框,python,qt,pyqt,Python,Qt,Pyqt,下面的代码创建了一个QListWidgetItem,其中QListWidgetItem分配了一个thumb图像 如果您演示如何在QListWidgetItem的周围创建颜色边框,我将不胜感激 这是一张照片,展示了一个概念: from PyQt4 import QtGui, QtCore import sys, os class MyClassItem(QtGui.QListWidgetItem): def __init__(self, parent=None): su

下面的代码创建了一个QListWidgetItem,其中QListWidgetItem分配了一个thumb图像

如果您演示如何在QListWidgetItem的周围创建颜色边框,我将不胜感激

这是一张照片,展示了一个概念:

from PyQt4 import QtGui, QtCore
import sys, os

class MyClassItem(QtGui.QListWidgetItem):
    def __init__(self, parent=None):
        super(QtGui.QListWidgetItem, self).__init__(parent)       


class ThumbListWidget(QtGui.QListWidget):
    def __init__(self, type, parent=None):
        super(ThumbListWidget, self).__init__(parent)
        self.setIconSize(QtCore.QSize(64, 64))

class Dialog_01(QtGui.QMainWindow):
    def __init__(self):
        super(QtGui.QMainWindow,self).__init__()
        self.listItems={}

        myQWidget = QtGui.QWidget()
        myBoxLayout = QtGui.QVBoxLayout()
        myQWidget.setLayout(myBoxLayout)
        self.setCentralWidget(myQWidget)

        self.listWidgetA = ThumbListWidget(self)

        for i in range(7):
            listItemAInstance=MyClassItem()
            name='A'+'%04d'%i
            listItemAInstance.setText(name)
            listItemAInstance.setBackgroundColor(QtCore.Qt.darkGray)   
            if i%2: listItemAInstance.setBackgroundColor(QtCore.Qt.gray)

            icon=self.getIcon(name)
            listItemAInstance.setIcon( icon ) 

            self.listWidgetA.addItem(listItemAInstance) 

            listItemBInstance=MyClassItem()
            name='B'+'%04d'%i
            listItemBInstance.setText(name)
            icon=self.getIcon(name)
            listItemBInstance.setIcon( icon )

        myBoxLayout.addWidget(self.listWidgetA)      

    def getIcon(self, name):
        thumbpath=os.path.expanduser("~")+'/thumbs/' +name+'/'+name+'.jpg'
        if not thumbpath: return
        if not os.path.exists(os.path.dirname(thumbpath)):
            os.makedirs(os.path.dirname(thumbpath))

        img = QtGui.QImage(64, 64, QtGui.QImage.Format_RGB32)
        img.fill(QtGui.QColor(96,96,96))     

        painter = QtGui.QPainter(img)
        font = painter.font()
        font.setBold(True)
        font.setPointSize(18)     

        painter.setPen(QtGui.QColor('black'))
        painter.setFont(font)
        painter.drawText(img.rect(), QtCore.Qt.AlignCenter, name)
        painter.end()
        img.save(thumbpath, 'JPG')

        icon = QtGui.QIcon( thumbpath )
        pixmap = icon.pixmap(64, 64)
        icon = QtGui.QIcon(pixmap)
        return icon

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    dialog_1 = Dialog_01()
    dialog_1.show()
    dialog_1.resize(720,480)
    sys.exit(app.exec_())


QWidget
派生的每个类都支持CSS样式。您可以做的是:

lwi = QListWidget()
lwi.setStyleSheet("QListWidget::item { border: 0px solid red }")
有关详细信息,请参阅

您还可以设置整个应用程序的样式,但将某一部分样式设置作为前缀仅应用于
QListWidgetItem

我发现的C++示例:


app.setStyleSheet(“QListWidget{background:red;}QListWidget::item{background:yellow;}QListWidget::item:selected{background:blue;}”)

我得到:
AttributeError:'QListWidgetItem'对象没有属性'setStyleSheet'
任何其他建议?是的,正如我提到的,整个应用程序的样式类似于“我找到的C++示例”的语法。代码几乎是一样的。为了在QListWidget周围有一个边框,我必须用CSS来设计每个小部件的样式?解决方案不是太费劲了吗?不。正如我所指出的,您可以将样式表设置为整个应用程序,但是在样式表字符串本身中放置
QListWidget::item{border:0px solid black;}
。这将仅导致QListWidgetItem应用CSS。我已经更新了答案的第一部分,为您提供了一个可能的解决方案。使用
app.setStyleSheet(“QListWidget…”)修改整个应用程序后,自定义单个
QListWidgetItem
我们应该使用
lwi.setStyleSheet(“QListWidget::item{border:0px solid red}”)