2015-11-04 3 views
0

Как вы можете получить номер позиции конкретного виджета PyQt в списке?Как получить позицию виджета в массиве - 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, я хочу передать текст 30-го числа QLabel из списка self.Reg_Labels.

+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' lsit в той же позиции, т. е. если текст 12-го позита «QLineEdit» изменен, я хочу отправить текст/заголовок 12-й позиции «QLabel» –

+0

@SaiGanesh Shure вы можете увидеть мой обновленный ответ, где я передать все 'QLabel': D –

+0

Я все еще получаю расположение виджета' QLineEdit' --- <объект PyQt4.QtGui.QLineEdit в 0x06FBC030> могу ли я его обновить, чтобы получить заголовок '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).

Смежные вопросы