1

我正在尝试在 UI 元素(QLineEdit)上使用 setattr 来填充从文本文件中读取的内容。我相信为了设置 QlineEdit 它将是self.lineEdit.setText()

我正在阅读的文本文件包含一个名称及其值:

名称 1=值 1

splitLine[0] 由“Name1”组成,splitLine[1] 为“Value1”。self.Name1 是我要更改的 lineEdit 的名称,因此我使用 eval() 将实际值“Name1”传递给 setattr。

我不确定如何设置值。现在我已经尝试了这些但没有成功:

setattr(self, eval("splitLine[0]"), eval("splitLine[1]"))

setattr(self, eval("splitLine[0]"), setText(eval("splitLine[1]")))

此外,使用:

self.splitLine[0].setText(splitLine[1])

不起作用,因为它认为实际对象称为 splitLine,而不是它的值(因此我尝试了 eval() )。

# AttributeError: 'Ui_Dialog' object has no attribute 'splitLine'
4

2 回答 2

1

你需要使用getattr,而不是setattr。也就是说,您首先需要获取行编辑对象(通过其属性名称),然后您可以调用其setText方法来填充字段:

    lineEdit = getattr(self, splitLine[0])
    lineEdit.setText(splitLine[1])

或在一行中:

    getattr(self, splitLine[0]).setText(splitLine[1])
于 2016-02-13T02:34:28.427 回答
0

没有必要evalsplitLine包含字符串,这是第二个参数所需的类型,并且对于第三个参数来说足够了。

setattr(self, splitLine[0], splitLine[1])
于 2016-02-13T02:13:39.090 回答