将小部件存储在字典中



我想将各种复选框存储在字典中,以便以后可以打电话给它们。由于我想根据具有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

最新更新