2016-02-13 32 views
1

我想在UI元素(QLineEdit)上使用setattr來填充從文本文件中讀取的內容。我相信,以設置QLineEdit的將是self.lineEdit.setText()在UI元素上使用setattr()

我讀的文本文件包含名稱和它的值:

名1 =值1

分裂線[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]) 

不工作,而不是它的值(因此爲什麼我試着eval())。

# AttributeError: 'Ui_Dialog' object has no attribute 'splitLine' 
+0

你試圖設置什麼屬性?大多數Qt對象沒有任何可以設置的屬性。您通常必須使用訪問器/增變器方法。 –

+0

似乎沒有任何需要你的'eval'調用,因爲你對每個調用都使用了一個常量字符串。爲什麼不使用'splitline [0]'和'splitline [1]'? – Blckknght

+0

self.splitLine [0] .setText(分裂線[1])是無效 Qt對象我設置是:self.Name1 和 分裂線[0] = 「NAME1」 我怎樣從splitLine [0]中獲取該值以設置Qt對象? – Zak44

回答

1

您需要使用getattr,不setattr。也就是說,你首先需要得到線路編輯對象(通過其屬性名稱),這樣就可以調用它的setText方法來填充字段:

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

或一個行:

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

我想設置一個QLineEdit UI字段。我爲什麼要用getattr?我很困惑。 – Zak44

+0

@ sz200。我已經更新了我的答案,使其更清晰。你真的嘗試過這些代碼嗎? – ekhumoro

+0

謝謝@ekhumoro。但我想了解這一點。爲什麼要將值賦給另一個變量lineEdit,然後在lineEdit上調用setText給我結果?但說... self.splitLine [0] .setText(splitLine [1]) 不會,而是我得到︰ #AttributeError:'Ui_Dialog'對象沒有屬性'splitLine'?我只是不明白,並希望理解邏輯。 – Zak44

0

不需要eval; splitLine包含字符串,這是第二個參數所需的類型,對於第三個參數來說足夠了。

setattr(self, splitLine[0], splitLine[1]) 
+0

雖然這個調用在Qt對象上不起作用。 – Zak44