所以我很想知道 QlistWidget 的 currentItem()) 和 selectedItems() 方法实际上是如何工作的。
我有什么(简化): -我有一个带有项目列表的 QlistWidget(usersList) -我有 QAbstractViewItem.extendedSelection 激活 -我有 QLineEdit(userAge) -我有一个字典 DataDict 与 key:value ==> ListItem.text ():QlineEdit.text())
-我已将 userAge.textChanged 连接到函数 saveData
**def** *saveData*():
currentItem=str(usersList.currentItem().text())
DataDict[currentItem]=QlineEdit.text()
-我已将 usersList.currentItemChanged 连接到函数 loadData:
**def** *loadData*(current,_previous):
currentItem=current.text()
#get data
data=dataDict[currentItem]
#clear previous data
userAge.clear()
#set Data
userAge.setText(data)
我想做什么/问题(简化):
- 现在在 UI 中保存/加载数据适用于一个项目(当前项目),但我希望用户能够选择多个项目将 usersAge 和 setData 更改为所有 selectedItems ,我正在尝试这样做通过像这样修改我的 saveData() :
def saveData():
for item in usersList.selectedItems():
currentItem=str(item.text())
DataDict[currentItem]=QlineEdit.text()
- 现在的问题是,当我通过单击另一个项目更改 currentItem 时,前一个项目的数据被当前加载的项目覆盖
-我知道可能发生的事情是(如果我没记错的话): 1.我点击另一个项目(更改当前项目) 2.currentItemChanged 被触发 3.loadData() 被调用 3.a userAge.clear() 被调用3.b userAge.textChanged 被触发 3.c saveData() 被调用(现在为空) 3.d userAge.setText(data)
3.e userAge.textChanged 被触发 3.f saveData() 被调用(加载数据)
- 在我看来,它应该可以正常工作,因为 currentItem/selectedItem 是相同的,但是导致问题的是当调用 saveData() 时,如果我打印 currentItem.text() 和 selectedItems(),currentItem 和 selectedItem 是不同的)[0].text() 当我输入 savData()
我注意到 currentItem= currentItem (这是正确的)但 selectedItems()[0].text() = previousItem (这是错误的,因为只选择了 currentItem )
为什么会这样?我究竟做错了什么?或者我错过了什么?为什么更改当前项目时选择没有更新?
我是新手,所以我可能做错了什么,但如果不是,请有人帮助我了解发生了什么?
非常感谢你