在字典中存储小工具

2024-04-27 09:23:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把我的各种复选框存储在字典中,以便以后可以调用它们。因为我想根据带有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'])命令就不起作用了。 我尝试了如下方法:

^{pr2}$

但得到的错误是:

IndexError: string index out of range

我也尝试过:

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

但我遇到了以下错误:

TypeError: unhashable type: 'slice'

有没有我遗漏的语法错误?小部件对象不能存储在字典中吗?有没有一种方法可以让我在字典中存储ID的widget?在

编辑:我原来的问题已经解决了,因为我错误地定义了字典的键/值。使用临时字典将所有小部件收集到一个数组中,然后用键'Line2'将它们等效到我的主字典,解决了这个问题。在


Tags: 方法selflen字典object部件错误range
1条回答
网友
1楼 · 发布于 2024-04-27 09:23:38

当您按如下方式添加元素时:

d[val1, val2] = some_value

类似于:

^{pr2}$

也就是说,键是一个元组,所以必须将元组作为键传递,以便它返回值。在

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

相关问题 更多 >