QT signalMapper with QLabel

программирование программы Linux C++ qt

Пытаюсь подключить сигнал clicked() на QLabel и обработать это дело таким образом (python):
for i in range(len(Units.modules.values())):
unit = Units.modules.values()[i]
label = QLabel(unit.label)
label.mouseReleaseEvent = lambda x:label.emit(SIGNAL("clicked()"))
#Этот не работает (
self.connect(label, SIGNAL("clicked()"), signalMapper, SLOT("map()"))
#А этот работает
#self.connect(label, SIGNAL("clicked()"), partial(self.showUnit,0))
signalMapper.setMapping(label,i)
label.setStyleSheet("QLabel::hover{background-color:red}")
label.setMinimumSize(100,50)
menuLayout.addWidget(label)
self.loadedUnits[i]=unit
self.connect(signalMapper, SIGNAL("mapped(int)"), self.showUnit)
Если заменить QLabel на QToolButton например, то все прекрасно обрабатывается, а с сигналмаппером не хочет...подскажите куда копать?

Примечание:
ну мне просто нужно было подключить сигнал на каждый лейбл с передачей уникального аттрибута...если без маппера делать в цикле, то не получается, потому что на каждый сигнал я вешал передачу i, а это было просто ссылкой на i а не его значением) в итоге все лейблы у меня срабатывали и передавали одно значение, что меня не устраивало. так как использование лейблов не принципиально, заменил все на кнопки, которые срабатывают)
На счет enumerate спасибо...век живи - век учись.
Ответы:
QSignalMapper мне тоже в питоне не удалось завести. Но, это не страшно, пользуйтесь functools.partials. Это нормально работает и это более python-way. В конце концов, QSignalMapper и был придуман для того, чтобы обойти ограничения C++, которых в питоне нет.
И, кстати, это извращение:
for i in range(len(Units.modules.values())):
              unit = Units.modules.values()[i]


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.