几周以来,我一直在与自定义小部件和列表作斗争。
我能够将自定义小部件添加到 QListWidget。我的问题是 insertItem 似乎有问题,因为无论我告诉它去哪一行,它总是将它放到列表的底部。
def AddToInitiative(self):
creature = self.comboBoxSelectCharacter.currentText()
if(creature):
widget = self.NewItemWidget()
customWidgetItem = QtGui.QListWidgetItem(self.initiativeList)
customWidgetItem.setSizeHint(QtCore.QSize(400,50))
self.initiativeList.addItem(customWidgetItem)
self.initiativeList.setItemWidget(customWidgetItem, widget)
widget.lineName.setText(creature)
return
def NewItemWidget(self):
customWidget = creature_initiative_object.InitCreatureObject()
customWidget.btnRemove.clicked.connect(self.ItemButtonClicked)
customWidget.btnInfo.clicked.connect(self.ItemButtonClicked)
customWidget.btnIncreaseInitOrder.clicked.connect(self.ItemButtonClicked)
customWidget.btnDecreaseInitOrder.clicked.connect(self.ItemButtonClicked)
return customWidget
def ChangeInit(self, row, direction, oldwidget):
item = self.initiativeList.takeItem(row)
widget = self.NewItemWidget()
widget.lineName.setText(oldwidget.lineName.text())
customWidgetItem = QtGui.QListWidgetItem(self.initiativeList)
customWidgetItem.setSizeHint(QtCore.QSize(400,50))
self.initiativeList.insertItem((row + direction), customWidgetItem)
self.initiativeList.setItemWidget(customWidgetItem, widget)
self.initiativeList.setCurrentRow(row+direction)
如果我尝试在列表中向上或向下移动项目,尽管分配了行号,它总是直接到底部。我已经输出了行号和计数来验证它应该是正确的行。
您是否知道使用 QListWidget 为需要保留数据的自定义小部件执行此操作的方法?有没有更好的模块可以使用?
我查看了 QListView、QBoxLayout 和其他一些,但无法让它像 QListWidget 一样工作。