【发布时间】:2017-06-03 03:23:50
【问题描述】:
我有一个 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)
现在,稍后在应用程序中,在用户单击按钮后,我想为所选项目更新文本“稍后使用的特定值”。我已经尝试过这样做
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?
【问题讨论】:
-
我没有发现任何问题。我可以想象两个错误来源:因为您的
QListWidgetItem连接到QListWidget,也许您有连接到覆盖值的更改信号的东西。如果您使用未连接到列表视图的QListWidgetItem,会发生什么情况?对我来说,它有效:pastebin.com/VSUithwZ 或者QVariant-conversion 可能发生了一些有趣的事情。它们的类型是什么? -
它是一个更大的应用程序的一部分,所以仅仅一个独立的 QListWidgetItem 是不可行的。我已经尝试使用字典(作为完整的应用程序使用)和我在此处发布的精简示例的字符串。两者都显示相同的结果。
-
我还没有任何信号连接到 ListWidget。
-
我写的代码呢?它在您的设置中有效吗?如果不是,你的 Qt 版本是什么?
-
@NewGuy。我无法重现这一点。我使用 PyQt-4.9.5、PyQt-4.10 和 PyQt-4.11.4 和 Qt-4.8.7 进行了测试。您正在使用的特定版本的 PyQ4 中似乎存在错误。您是否使用完全精简的最小示例进行了测试,该示例仅创建一个包含一个项目的列表小部件?您需要这样做以隔离问题并确认它是 PyQt4 中的错误,而不是您自己程序中的错误。
标签: python python-2.7 pyqt pyqt4