2017-06-28 66 views
0

我想將我的各種複選框存儲在字典中,以便稍後可以調用它們。因爲我想根據小部件的數量執行操作,所以我需要一些將它們全部存儲在數組中的方法。將每個小部件存儲在如下獨特條目中:存儲小部件在字典中

for i in range(7): #INPUT LINE 2 
     self.il['Line2',i] = QtWidgets.QCheckBox(self.il2info[i],self) 
print(self.il['Line2',i]) 

--------output---------- 
<PyQt5.QtWidgets.QCheckBox object at 0x0000021A4398EE58> 
<PyQt5.QtWidgets.QCheckBox object at 0x0000021A4398EF78> 
<PyQt5.QtWidgets.QCheckBox object at 0x0000021A439690D8> 
<PyQt5.QtWidgets.QCheckBox object at 0x0000021A43969168> 
<PyQt5.QtWidgets.QCheckBox object at 0x0000021A439691F8> 
<PyQt5.QtWidgets.QCheckBox object at 0x0000021A43969288> 
<PyQt5.QtWidgets.QCheckBox object at 0x0000021A43969318> 

但是隨後我的len(self.il['Line2'])命令不起作用。 我已經試過類似如下:

self.il['Line2'[i]] = QtWidgets.QCheckBox(self.il2info[i],self) 

,但得到的錯誤:

IndexError: string index out of range 

我也試圖做的事:

self.il['Line2':[i]] = QtWidgets.QCheckBox(self.il2info[i],self) 

但我遇到了以下錯誤:

TypeError: unhashable type: 'slice' 

是否有一些我缺少的語法錯誤?小部件對象是否不能存儲在字典中?有沒有一種方法可以讓我使用ID來存儲ID字典中的ID?

編輯:我原來的問題已經解決,因爲我錯誤地定義了我的字典的鍵/值。使用臨時字典將所有小部件收集到一個數組中,然後使用'Line2'鍵將它們等同於我的主字典,從而解決了問題。

+0

你存儲切片對象,而不是無論你想要的關鍵。你能更新你的例子嗎? –

+0

恐怕我不明白你的評論。我希望將「對象」存儲爲我的'Line2'鍵的值。我不希望對象被切片。 – JN3

+0

@ JN3查看我的回答 – eyllanesc

回答

0

當您添加一個元素,如下所示:

d[val1, val2] = some_value 

是類似於:

d[(val1, val2)] = some_value 

也就是說,關鍵是一個元組,所以你必須通過元組作爲重點,使它返回值。

new_value = d[(val1, val2)] 

你的情況:

self.il['Line2', i] = some_value 
new_value = self.il['Line2', i] 

在您指明例如:如果你傳遞一個索引

self.il['n'] 

或者更糟:

self.il['Line2'[2]] 

它相當於高於字母數量。

self.il['Line2'[6]] 

注意:你把一個元組作爲重點不產生一個數組,如果你想讓你必須創建字典詞典的陣列的結構。

tmp_dict = {} 
for i in range(7): 
    tmp_dict[i] = QtWidgets.QCheckBox(self.il2info[i],self) 
self.il['Line2'] = tmp_dict 

然後,當你要訪問您使用:

#read 
new_value = self.il['Line2'][i] 
#write 
self.il['Line2'][i] = some_value 

例子:

for i in range(len(self.il['Line2'])): 
    new_value = self.il['Line2'][i] 
    self.il['Line2'][i] = some_value 
+0

所以如果我正確地理解了你,我一直在做的是創建一堆唯一的鍵,而不是一個具有多個值的鍵'Line2'。具有數組值的鍵將需要字典中的字典? – JN3

+0

@ JN3我已經添加了一個如何去做的例子 – eyllanesc

+0

我可以通過使用len()命令來確定self.il ['Line2']中的值的數量嗎? – JN3