【问题标题】:PyQt QListWidget custom itemsPyQt QListWidget 自定义项
【发布时间】:2014-08-07 16:17:53
【问题描述】:

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

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

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

我正在使用 PyQt 顺便说一句

【问题讨论】:

  • 你能解释一下为什么这不起作用吗?您是否收到错误消息或只是没有看到您预期的行为?
  • 因为在下一行我尝试做 self.setText("test") 但它没有显示 "test"

标签: python pyqt qlistwidgetitem


【解决方案1】:

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

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

  1. 创建您的自定义小部件。

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

  3. 使用QListWidget.setItemWidget (self, QListWidgetItem item, QWidget widget)方法在QListWidgetItemQtGui.QListWidget中创建一个自定义小部件对象并在QListWidgetItem中设置项目。

这是一个解释我的解决方案的示例:

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

实验结果

【讨论】:

  • 谢谢!这正是我要找的!
  • 这个例子太棒了! (与 Nyaruko wwww)谢谢!
  • 凹凸。我在这里有一个问题@Kitsune 你将如何访问 myQCustomQWidget 中的项目?如果我从主 QList 中选择 [0] 行,我将如何访问 myQCustomQWidget 中的文本变量,例如 TextDown ?
  • @Arukaito,您可以简单地在类 QCustomQWidget def getTextUp(self): return self.textUpQLabel.text() 中添加一个方法,然后按如下方式访问它for row in range(self.myQListWidget.count()): item = self.myQListWidget.itemWidget(self.list.item(row)) text = item.getTextUp()
猜你喜欢
  • 2019-04-02
  • 2017-11-19
  • 1970-01-01
  • 2018-04-20
  • 2013-04-22
  • 2012-05-18
  • 1970-01-01
  • 2011-10-15
  • 2011-06-30
相关资源
最近更新 更多