使用setattr()访问动态方法

时间:2017-08-02 16:58:50

标签: python

我试图改变QT中的某些字段属性。

这是代码:

req_fields = ["first_name", "last_name", "street", "city"]
for field in req_fields:
    if getattr(self, field).text() == "":
        setattr(self, field, setStyleSheet("QLineEdit{ border : 2px solid red;}"))
        setattr(self, field, setText("test"))

我收到错误:

setattr(self, field, setStyleSheet("QLineEdit { border : 2px solid red;}"))
NameError: name 'setStyleSheet' is not defined

我不明白为什么getattr功能有效,而setattr没有。

如果我手动使用:

self.first_name.setStyleSheet("QLineEdit { border : 2px solid red;}")

我得到了预期的结果。

1 个答案:

答案 0 :(得分:1)

setStyleSheet中使用setattr()时,它被视为全局变量(未定义)。当您使用self.first_name.setStyleSheet时,setStyleSheet一词被视为(正当)self.first_name的属性。

我没有安装QT,但认为这样的事情会起作用:

req_fields = ["first_name", "last_name", "street", "city"]
for fieldname in req_fields:
    field = getattr(self, field)
    if field.text() == "":
        field.setStyleSheet("QLineEdit { border: 2px solid red;}")
        field.setText("test")