python - 如何从 PyQt 中的 QListWidget 更新与 QListWidgetItem 关联的数据?

标签 python python-2.7 pyqt pyqt4

我有一个 QListWidget,它有 10 个 QListWidgetItems。当每个 QListWidgetItems 创建时,我会做这样的事情:

item = QtGui.QListWidgetItem("Text to Show")
item.setData(36, "A specific value that is used later")
self.ui.my_list.addItem(item)

现在,稍后在应用程序中,在用户单击按钮后,我想为所选项目更新文本“A specific value that is used later”。我已经尝试这样做了

ndx = self.ui.my_list.currentRow()
self.ui.my_list.item(ndx).setData(36, "Updated!")

问题是,这行不通。它不会抛出任何错误,但数据就这样消失了。在我的按钮按下信号中,我有这段代码可以查看重新分配前后的值:

ndx = self.ui.my_list.currentRow()   
print "Before:", self.ui.my_list.item(ndx).data(36).toPyObject()
self.ui.my_list.item(ndx).setData(36, "Updated!")
print "After:", self.ui.my_list.item(ndx).data(36).toPyObject()

这个输出:

Before: A specific value that is used later
After:

如何正确更改数据以便将其保存回 QListWidgetItem

最佳答案

您可能需要检查您使用的角色值是否是有效的用户角色,否则它可能会在内部被更改。我用c++写的,但是我经常使用QListWidget和QListWidgetItem(s),这是我早期遇到的问题。我认为无论使用哪种语言,功能都是相似的。根据文档here ,第一个可以使用的用户角色是0x0010。因此,为了将其与您的示例联系起来,您可以尝试以下操作:

item.setData(0x0010, "后面用到的具体值")

对于其他项目角色,您将使用 0x0011、0x0012、0x0013 等。

关于python - 如何从 PyQt 中的 QListWidget 更新与 QListWidgetItem 关联的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41724671/

相关文章:

python - Windows 上的 Pygame 安装 - 错误 : Unable to find vcvarsall. bat

python - IO错误: [Errno 13] Permission denied: I do have permissions?

python - PyQt 用字典发出信号

python - 将字符串行转换为字典

python - locust.io 中响应时间分布的目的是什么?

google-app-engine - ndb.StructuredProperty 不保存 key ?

python - 执行谷歌搜索并返回结果数

python - 用于 Python 的 Google Maps Engine API 客户端库,用于创建表资源

python - 如何从 pyuic .py 文件重建 .ui 文件

PyQt QTest 单击 QMenu