从string到pyqt对象作为变量

时间:2016-05-30 14:05:00

标签: python variables pyqt

我有很多复选框(如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)

提前致谢。

2 个答案:

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