如何获取 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
)。
如何获得列表中特定 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
)。