我想将各种复选框存储在字典中,以便以后可以调用它们。由于我想根据len(self.il['Line2'])
小部件的数量执行操作,我需要一些方法将它们全部存储在一个数组中。将每个小部件存储在一个唯一的条目中,如:
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存储在字典中?
编辑:我原来的问题已经解决,因为我错误地定义了字典的键/值。使用临时字典将所有小部件收集到一个数组中,然后使用&#39; Line2&#39;的键将它们等同于我的主字典。解决了这个问题。
答案 0 :(得分: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['Line2'[2]]
相当于:
self.il['n']
如果您传递的索引高于字母数,则会更糟。
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