2014-05-24 40 views
0

我想創建一個QListView或包含許多這些項目的QListWidget。我已經看過了製作委託,還使用setItemWidget來設置小部件。兩者都有困難。使用自定義小部件填充QListWidget

這下面是在QT設計器中創建的,然後我有一個UIC文件,我用uic.loadUi加載到子類QWidget中,沒有什麼會崩潰,但listWidgetItems是空的。

任何幫助,將不勝感激。我將在下面進行迭代,所以我希望能夠動態加載UIC。

可能有成千上萬的動畫,所以如果可能的話我想保持它的高性能。

enter image description here

+0

那麼,如果你想要將上面給出的ui加載到QlistView中,那麼你是不符合要求的。您無法將用戶界面輸入到listwidget甚至listView中。 – TheCreator232

+0

分享您用於執行此操作的代碼。 – TheCreator232

+0

請顯示您的代碼。 – lpapp

回答

1

所以,我不能委託做的,但這裏的代碼用於加載從QtDesigner生成自定義窗口小部件加載到ListView控件與setItemWidget做:

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

相關問題