python - 使用自定义小部件填充 QListWidget

标签 python qt pyqt pyqt4 pyside

我想创建一个包含许多这些项目的 QListView 或 QListWidget。我研究过创建委托(delegate)并使用 setItemWidget 来设置小部件。我在这两方面都遇到困难。

下面是在 QT Designer 中创建的,然后我有一个 UIC 文件,我使用 uic.loadUi 将其加载到子类 QWidget 中,没有任何崩溃,但 listWidgetItems 是空的。

如有任何帮助,我们将不胜感激。我将在下面对此进行迭代,因此我希望能够动态加载 UIC。

可能有数千个动画,所以如果可能的话我希望保持其性能。

enter image description here

最佳答案

所以,我无法使用委托(delegate)来完成此操作,但这里是通过加载从 QtDesigner 生成的自定义小部件来完成此操作的代码,该小部件通过 setItemWidget 加载到 listView 中:

import os, sys
import xml.etree.ElementTree as et
from PyQt4 import QtGui, QtCore, uic

class uiControlTest(QtGui.QMainWindow):
    def __init__(self):
        super(uiControlTest, self).__init__()
        self.ui = uic.loadUi('uiControlTest.ui')
        self.ui.show()

        for i in range(0,300):
            wid = animItemWidget()
            wid.label_2.setText('Last edited by chrise @2014.06.21:23:17')
            wid.label.setText('Animation ' + str(i) + '       ')

            wid2 = QtGui.QListWidgetItem()
            wid2.setSizeHint(QtCore.QSize(100, 40))
            self.ui.list.addItem(wid2)
            self.ui.list.setItemWidget(wid2, wid)

        def awesomeButtonPressed():
            print 'awesome!'

class animItemWidget(QtGui.QWidget):

    def __init__(self, parent=None):
        super(animItemWidget, self).__init__()
        self.horizontalLayout_4 = QtGui.QHBoxLayout(self)
        self.horizontalLayout_4.setSpacing(2)
        self.horizontalLayout_4.setMargin(3)
        self.horizontalLayout_4.setObjectName(QtCore.QString.fromUtf8("horizontalLayout_4"))
        self.verticalLayout_2 = QtGui.QVBoxLayout()
        self.verticalLayout_2.setObjectName(QtCore.QString.fromUtf8("verticalLayout_2"))
        self.label = QtGui.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(11)
        font.setWeight(75)
        font.setBold(True)
        self.label.setFont(font)
        self.label.setObjectName(QtCore.QString.fromUtf8("label"))
        self.verticalLayout_2.addWidget(self.label)
        self.pixMap02 = QtGui.QLabel(self)
        self.pixMap02.setText(QtCore.QString.fromUtf8(""))
        self.pixMap02.setObjectName(QtCore.QString.fromUtf8("pixMap02"))
        self.verticalLayout_2.addWidget(self.pixMap02)
        self.horizontalLayout_4.addLayout(self.verticalLayout_2)
        self.verticalLayout = QtGui.QVBoxLayout()
        self.verticalLayout.setObjectName(QtCore.QString.fromUtf8("verticalLayout"))
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setSpacing(2)
        self.horizontalLayout.setObjectName(QtCore.QString.fromUtf8("horizontalLayout"))
        self.pixMap01 = QtGui.QLabel(self)
        self.pixMap01.setText(QtCore.QString.fromUtf8(""))
        self.pixMap01.setObjectName(QtCore.QString.fromUtf8("pixMap01"))
        self.horizontalLayout.addWidget(self.pixMap01)
        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.button02 = QtGui.QPushButton(self)
        self.button02.setMaximumSize(QtCore.QSize(24, 24))
        self.button02.setText(QtCore.QString.fromUtf8(""))
        self.button02.setObjectName(QtCore.QString.fromUtf8("button02"))
        self.horizontalLayout.addWidget(self.button02)
        self.button01 = QtGui.QPushButton(self)
        self.button01.setMaximumSize(QtCore.QSize(24, 24))
        self.button01.setText(QtCore.QString.fromUtf8(""))
        self.button01.setObjectName(QtCore.QString.fromUtf8("button01"))
        self.horizontalLayout.addWidget(self.button01)
        self.button04 = QtGui.QPushButton(self)
        self.button04.setMaximumSize(QtCore.QSize(24, 24))
        self.button04.setText(QtCore.QString.fromUtf8(""))
        self.button04.setObjectName(QtCore.QString.fromUtf8("button04"))
        self.horizontalLayout.addWidget(self.button04)
        self.button03 = QtGui.QPushButton(self)
        self.button03.setMaximumSize(QtCore.QSize(24, 24))
        self.button03.setText(QtCore.QString.fromUtf8(""))
        self.button03.setObjectName(QtCore.QString.fromUtf8("button03"))
        self.horizontalLayout.addWidget(self.button03)
        self.button05 = QtGui.QPushButton(self)
        self.button05.setMaximumSize(QtCore.QSize(24, 24))
        self.button05.setText(QtCore.QString.fromUtf8(""))
        self.button05.setObjectName(QtCore.QString.fromUtf8("button05"))
        self.horizontalLayout.addWidget(self.button05)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.horizontalLayout_3 = QtGui.QHBoxLayout()
        self.horizontalLayout_3.setObjectName(QtCore.QString.fromUtf8("horizontalLayout_3"))
        self.label_2 = QtGui.QLabel(self)
        self.label_2.setObjectName(QtCore.QString.fromUtf8("label_2"))
        self.horizontalLayout_3.addWidget(self.label_2)
        self.verticalLayout.addLayout(self.horizontalLayout_3)
        self.horizontalLayout_4.addLayout(self.verticalLayout)

        self.connect(self.button02, QtCore.SIGNAL("clicked()"), self.awesome)

    def awesome(self):
        print self.label.text() + ' is awesome!'


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    win = uiControlTest()
    sys.exit(app.exec_())

enter image description here

关于python - 使用自定义小部件填充 QListWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23850696/

相关文章:

Python:获取与文件关联的应用程序列表 (Linux)

qt - 如何获取Qt中打开的窗口列表

python - 如何设置像素图的最大宽度和高度?

python - 在 QTabBar 中的各个选项卡上设置并保留颜色

Qt。获取 QString 的一部分

python - QT 翻译和 HTML 子集

python - os.system 或子进程将命令传递给 shell

python - 在多索引 Python Panda 数据框中过滤多个项目

python - 有什么方法可以用列表理解来转换这个 for 循环?

windows - 带有 QT 的 OpenCV 2.4.2