我有很多复选框(如500),我想要保存。他们的名字是这样的: pr0,pr1,pr2等。
我想做的是:
try:
if self.ui.pr0.isChecked():
pr0 = 1
else:
pr0 = 0
except:
pr0 = 0
有没有办法将变量放入第2行?
list = []
for i in range(500):
try:
if self.ui.(variable).isChecked():
pr = 1
else:
pr = 0
except:
pr = 0
list.append(pr)
提前致谢。
答案 0 :(得分:1)
您可以使用标准库中的getattr功能。
for i in range(500):
var_name = "pr%i" % i
var_value = getattr(self.ui, "pr%i" % i).isChecked()
print "%s has value: %s" % (var_name, var_value)
答案 1 :(得分:1)
更通用的方法是使用QObject.findChildren
动态获取所有复选框的列表。
checkboxes = self.ui.findChildren(QtGui.QCheckBox, QtCore.QRegExp(r'pr\d+'))
values = {}
for cb in checkboxes:
values[cb.objectName()] = cb.isChecked()
# If you absolutely want to cast to int, though you shouldn't have to.
# values[cb.objectName()] = int(cb.isChecked())
这将为您提供每个复选框都带有Object Name: check value
的字典。然后,您可以使用json或pickle保存字典,然后使用findChildren
以相同的方式通过迭代来恢复它。
for name, value in values.items():
try:
child = self.ui.findChildren(QtGui.QCheckBox, name)[0]
child.setChecked(value)
except IndexError:
pass