如何在列表中获取特定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
的文本。
答案 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
)。