PyQt QListWidget自定义项

时间:2014-08-07 16:17:54

标签: python pyqt qlistwidgetitem

如何创建一个QListWidgetItem,其下面有1个图像和2个标签/字符串,支持css?

这是我尝试过的最后一件事:

class CustomListWidgetItem(QListWidgetItem, QLabel):
    def __init__(self, parent=None):
        QListWidgetItem.__init__(self, parent)
        QLabel.__init__(self, parent)

我正在使用PyQt btw

1 个答案:

答案 0 :(得分:28)

  

如何创建一个包含1个图像和2个的QListWidgetItem   下面的标签/字符串,支持css?

在这种情况下,你不能(它实际上有一个API可以轻松添加图标,但不可能有两个标签/字符串)。但是,您可以创建自己的自定义窗口小部件并将其放入QtGui.QListWidget

  1. 创建自定义小部件。

  2. 在主应用程序中创建QtGui.QListWidget

  3. 使用QListWidgetItem方法创建自定义窗口小部件对象,QListWidgetItem中的QtGui.QListWidget设置项位于QListWidget.setItemWidget (self, QListWidgetItem item, QWidget widget)

  4. 这是一个解释我的解决方案的例子:

    import sys
    from PyQt4 import QtGui
    
    class QCustomQWidget (QtGui.QWidget):
        def __init__ (self, parent = None):
            super(QCustomQWidget, self).__init__(parent)
            self.textQVBoxLayout = QtGui.QVBoxLayout()
            self.textUpQLabel    = QtGui.QLabel()
            self.textDownQLabel  = QtGui.QLabel()
            self.textQVBoxLayout.addWidget(self.textUpQLabel)
            self.textQVBoxLayout.addWidget(self.textDownQLabel)
            self.allQHBoxLayout  = QtGui.QHBoxLayout()
            self.iconQLabel      = QtGui.QLabel()
            self.allQHBoxLayout.addWidget(self.iconQLabel, 0)
            self.allQHBoxLayout.addLayout(self.textQVBoxLayout, 1)
            self.setLayout(self.allQHBoxLayout)
            # setStyleSheet
            self.textUpQLabel.setStyleSheet('''
                color: rgb(0, 0, 255);
            ''')
            self.textDownQLabel.setStyleSheet('''
                color: rgb(255, 0, 0);
            ''')
    
        def setTextUp (self, text):
            self.textUpQLabel.setText(text)
    
        def setTextDown (self, text):
            self.textDownQLabel.setText(text)
    
        def setIcon (self, imagePath):
            self.iconQLabel.setPixmap(QtGui.QPixmap(imagePath))
    
    class exampleQMainWindow (QtGui.QMainWindow):
        def __init__ (self):
            super(exampleQMainWindow, self).__init__()
            # Create QListWidget
            self.myQListWidget = QtGui.QListWidget(self)
            for index, name, icon in [
                ('No.1', 'Meyoko',  'icon.png'),
                ('No.2', 'Nyaruko', 'icon.png'),
                ('No.3', 'Louise',  'icon.png')]:
                # Create QCustomQWidget
                myQCustomQWidget = QCustomQWidget()
                myQCustomQWidget.setTextUp(index)
                myQCustomQWidget.setTextDown(name)
                myQCustomQWidget.setIcon(icon)
                # Create QListWidgetItem
                myQListWidgetItem = QtGui.QListWidgetItem(self.myQListWidget)
                # Set size hint
                myQListWidgetItem.setSizeHint(myQCustomQWidget.sizeHint())
                # Add QListWidgetItem into QListWidget
                self.myQListWidget.addItem(myQListWidgetItem)
                self.myQListWidget.setItemWidget(myQListWidgetItem, myQCustomQWidget)
            self.setCentralWidget(self.myQListWidget)
    
    app = QtGui.QApplication([])
    window = exampleQMainWindow()
    window.show()
    sys.exit(app.exec_())
    

    注意:我有图片文件icon.png,尺寸为48 x 48像素。

    QListWidget.setItemWidget

    实验结果

    enter image description here