2015-11-04 55 views
0

如何獲取某個特定的PyQt-widget在列表中的位置號?如何獲得一個數組中的Widget的位置 - python

我想實現像

self.Reg_Labels =[] # list fot QLabel 
self.Reg_Fields =[] # list for QLineEdit 


for i in xrange(53): 
    x = str(self.Registers(i)) 
    self.Reg_Labels.append(QtGui.QLabel(x)) # this gets a label text in every iteration 
    self.Reg_fields.append(QtGui.QLineEdit()) 

for y in xrange(53): 
    self.Reg_Fields[i].returnPressed.connect(lambda : self.reg_change(y) 
    # i also want to send the position of the QLineEdit in the list 
    # but i always get the last position for any change in QLineEdit 
. 
. 
def reg_change(self,num): 
    sender = self.sender() 
    print num, sender.text() ,sender.objectName() 

東西,我想要得到的QLabel的文本在同一位置的改變QLineEdit部件。

F.ex.如果第30個QLineEdit小部件文本發生更改,我想從self.Reg_Labels列表中傳遞第30個QLabel的文本。

+1

爲什麼兩個列表而不是字典? –

+0

該模塊從外部excel文件中獲取標籤文本,該文件包含更新的所有名稱,地址等(大約50+) –

回答

2

更改lambda : self.reg_change(y)lambda y=y: self.reg_change(y)應該叫reg_change用正確的n,所以在那裏你可以不是試圖sender = self.Reg_fields[n]

或者只是傳遞的Reg_fields元素馬上:

for field in self.Reg_Fields: 
    field.returnPressed.connect(lambda field=field: self.reg_change(field)) 

def reg_change(self, field): 
    print field.text(), field.objectName() 
+0

,而不是傳遞其自己列表的位置。我可以將'QLabel'文本從' self.Reg_Labels'在相同的位置上,即如果第12個位置'QLineEdit'文本被改變,我想發送第12個位置的文本\標題'QLabel' –

+0

@SaiGanesh舒爾你可以看到我更新的答案,我在哪裏傳遞整個'QLabel':D –

+0

我仍然可以獲得'QLineEdit'小部件的位置--- 我可以更新它來獲得'QLabel'標題('self.Reg_Labels')和'QLineEdit'文本('self.Reg_Fields = []') –

0

雖然@causa prima's answer似乎已經解決您的問題,使用字典可以提高代碼的可讀性

您可以取代

self.Reg_Labels =[] # list fot QLabel 
self.Reg_Fields =[] # list for QLineEdit 

self.Reg = {} 

從QLineEdit的到QLabel字典,通過插入

for x in [str(reg) for reg in Registers]: 
    self.Reg[QtGui.QLineEdit()] = QtGui.QLabel(x) # this gets a label text in every iteration 

(假設Registers是一個迭代,你可以用這種形式,否則只使用xrange)。

相關問題