PyQt:在QListWidget中更新自定义列表小部件项

时间:2017-06-17 04:39:44

标签: python pyqt qt5 pyqt5 qtwidgets

我能够使用以下代码在QListWidget中添加自定义QListWidgetItem -

for item in dl_list:            
        widget = QtWidgets.QWidget()
        card = Ui_DownloadCard()
        card.setupUi(widget)
        card.set_filename(item["title"])
        card.set_progress_bar(item["progress"])
        card.set_progress_text(item["progress"]/item["size"])
        card.set_speed(item["speed"])

        listItem = QtWidgets.QListWidgetItem(self.download_list)
        listItem.setSizeHint(widget.sizeHint())

        self.myListWidget.addItem(listItem)
        self.myListWidget.setItemWidget(listItem, widget)

现在我想用新的速度更新每个项目&进展。我尝试了以下代码 -

self.myListWidget.item(0).set_speed("300 KB/s")

但它提出错误说

AttributeError: 'QListWidgetItem' object has no attribute 'set_speed'

那么更新项目的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

listItem = QtWidgets.QListWidgetItem(self.download_list)

您需要使用自定义项目:

listItem = YourCustomListWidgetItem(self.download_list)

答案 1 :(得分:0)

根据规格: http://pyqt.sourceforge.net/Docs/PyQt4/qlistwidget.html#setItemWidget

QListWidget.setItemWidget

此功能仅应用于在列表小部件项目的位置显示静态内容。如果要显示自定义动态内容或实现自定义编辑器小部件,请改用QListView和子类QItemDelegate。

因此,如果要使用动态组件,则必须使用QListView和QItemDelegate子类。