我想将各种复选框存储在字典中,以便以后可以打电话给它们。由于我想根据具有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存储在字典中的窗口小部件?
编辑:我的原始问题已经解决,因为我错误地定义了字典的键/值。使用临时词典将所有小部件收集到数组中,然后将它们等同于我的主字典中的" line2"键修复了问题。
当您添加一个元素时:
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]]
Note :将元组作为钥匙放置的内容不会生成数组,如果要获得数组的结构,则必须用字典创建字典。
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