将小部件存储在字典

时间:2017-06-28 19:30:01

标签: python qt pyqt pyqt5

我想将各种复选框存储在字典中,以便以后可以调用它们。由于我想根据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;的键将它们等同于我的主字典。解决了这个问题。

1 个答案:

答案 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