kam*_*tor 0 python pyqt4 python-3.x
我发现的所有答案都只是说使用字典或列表.我正在制作一个应用程序,并且GUI正在QT创建者中进行设计.有一系列复选框(21),在Qt Creator中都标有cb0 .... cb20.我有一个21元素列表,表示是否应该选中复选框.有没有办法循环变量名称?伪代码:
for i in range(21):
if cbList[i]:
cb'i'.setChecked=True
else:
cb'i'.setChecked=False
Run Code Online (Sandbox Code Playgroud)
如何cb'i'将i转换为变量名?
为清晰起见添加:我不想创建字典,然后将字典值设置为true或false.变量已经存在.它们是GUI中的复选框.所有复选框都是名称cb0 ... cb20.它们具有我希望为复选框的每个实例调用的函数setChecked.例如,cb0.setChecked(False)将禁用该复选框.我有一个与每个复选框对应的列表.我试图避免cb1.setChecked(True)为所有21个复选框写作.
这是一个糟糕的主意.并找出原因,阅读这篇文章.
而是使用列表或字典选项.
cb = defaultdict(dict)
for i in range(21):
if cbList[i]:
cb[i]['setChecked'] = True
else:
cb[i]['setChecked'] = False
Run Code Online (Sandbox Code Playgroud)
使用字典可以使用"关联存储器"或"关联数组"调用变量,而不必知道数组中对象的索引.为了达到你想要的效果,给出字典键如下:
cb["cb%s"%(i)]
Run Code Online (Sandbox Code Playgroud)
这样你可以将特定变量4称为:cb['cb4']如果需要.
编辑:我刚刚意识到你的意思是你试图调用QT复选框.在这种情况下,我建议您不要使用复选框列表,而是可以使用字典,其中字典的键是复选框ID的名称,值是QT对象本身.
cb = {}
for i in range(21):
cb['cb%s'%i] = getattr(self.ui, 'cb%s'%i)
Run Code Online (Sandbox Code Playgroud)
现在,当您想要将特定复选框设置为true或false时,您只需调用:
cb['cb3'].setChecked(True)
Run Code Online (Sandbox Code Playgroud)
为什么这是一个更好的编码实践:你只需要为每个复选框迭代一次getattr(当你最初设置字典时).此外,如果进行单个更改,则可以直接获取要操作的对象.