2017-06-28 157 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