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

How to get the position of a Widget in an array - python

如何获得列表中特定 PyQt 小部件的位置编号?

我正在尝试实现类似

的东西
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()

我想在与更改后的 QLineEdit 小部件相同的位置获取 QLabel 的文本。

F.ex。如果更改了第 30 个 QLineEdit 小部件文本,我想从 self.Reg_Labels 列表中传递第 30 个 QLabel 的文本。

lambda : self.reg_change(y) 更改为 lambda y=y: self.reg_change(y) 应该用右边的 n 调用 reg_change,所以在那里你可以尝试 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()

虽然 @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)。