2017-01-03 75 views
0

所以我很想知道QlistWidget的currentItem())和selectedItems()方法是如何工作的。PYQT4 QlistWidget:當currentItemchaged被調用時,currentItem和selectedItem會有所不同,爲什麼?

我所(簡化): -I有QlistWidget與項目(usersList) -I已經QAbstractViewItem.extendedSelection激活 -I有QLineEdit的(userAge) -I列表與關鍵字的詞典DataDict :值==> ListItem.text():QlineEdit.text())

-I已連接userAge.textChanged到功能SAVEDATA

**def** *saveData*(): 
    currentItem=str(usersList.currentItem().text()) 

    DataDict[currentItem]=QlineEdit.text() 

-I已連接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中的數據的保存/載入適用於一個項目 (CURRENTITEM),但我希望用戶可以可以選擇多個項目 的usersAge和使用setData改變所有selectedItems,我試圖通過修改我的SAVEDATA()像這樣做:

def saveData(): 
    for item in usersList.selectedItems(): 
     currentItem=str(item.text()) 
     DataDict[currentItem]=QlineEdit.text() 

-the現在的問題是,當我改變CURRENTITEM通過點擊另一個項目前面的數據S幫當前覆蓋加載一個

-I知道什麼是可能發生的事情(如果我沒有錯):在另一個項目 1.I點擊(改變當前項目) 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和selectedItem是不同的,如果我打印currentItem.text()和selectedItems ()[0] .text()當我輸入savData()

我注意到currentItem = currentItem(這是正確的),但selectedItems()[0] .text()= previousItem(這是錯誤的原因只有currentItem被選中)

爲什麼會發生這種情況?我究竟做錯了什麼?或者我錯過了什麼? 爲什麼選擇在更改當前項目時沒有更新?

我是一個新手,所以我可能做錯了什麼,但如果沒有人可以幫助我瞭解發生了什麼?

非常感謝你提前

回答

0

如此玩弄和嘗試一些不同的東西(不是邏輯只是想)我找到了解決這個問題後,所以我要做的就是所謂的usersList。setCurrentItem(電流)loadData(內部)功能,像這樣:

**def** *loadData*(current,_previous): 
    currentItem=current.text() 
    #get data 
    data=dataDict[currentItem] 
    #clear previous data 
    userAge.clear() 
    #FIX 
    usersList.setCurrentItem(current) 
    #set Data 
    userAge.setText(data) 

這似乎很多餘的給我,但這樣一來,當我打印CURRENTITEM和selectedItems()[0](如果只選擇一項)在saveData()它打印currentItem == selectedItems()[0],所以唯一的數據覆蓋是currentItem,selectedItems()[0]這是它自己的數據 這給我的行爲我想要

但我仍然無能爲力,爲什麼會發生這種情況,爲什麼會解決這個問題

歡呼聲

相關問題