如何在数组中获取Widget的位置 - python

时间:2015-11-04 14:44:48

标签: python python-2.7 pyqt

如何在列表中获取特定PyQt-widget的位置编号?

我正在尝试实现像

这样的东西
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小部件文本,我想从QLabel列表中传递第30个self.Reg_Labels的文本。

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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)。