Форум сайта python.su
Доброго времени суток, имею неудовольствие столкнуться с проблемой, решение которой лежит вне области моего восприятия.
for i in range(len(Units.modules.values())): unit = Units.modules.values()[i] label = QLabel(unit.label) #Cоздаю Лейбл 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) #Тут мониторю маппер def showUnit(self,args): print(args)
Офлайн
Советую использовать новый стиль сигналов / слотов http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html
Офлайн
ragnarek
Доброго времени суток, имею неудовольствие столкнуться с проблемой, решение которой лежит вне области моего восприятия.for i in range(len(Units.modules.values())): unit = Units.modules.values()[i] label = QLabel(unit.label) #Cоздаю Лейбл 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) #Тут мониторю маппер def showUnit(self,args): print(args)
Подскажите если знает кто? Причем если заменить Лейбл заменить на ТулБаттон то все работает нормально(
Офлайн
ValeriyBПоддерживаю.
Советую использовать новый стиль сигналов / слотов http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from PyQt4 import QtCore, QtGui class ClickableLabel(QtGui.QLabel): clicked = QtCore.pyqtSignal() def mouseReleaseEvent(self, e): QtGui.QLabel.mouseReleaseEvent(self, e) self.clicked.emit() class MainWidget(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.signalMapper = QtCore.QSignalMapper() layout = QtGui.QVBoxLayout() for i in range(10): label = ClickableLabel('Label %s' % i) label.clicked.connect(self.signalMapper.map) self.signalMapper.setMapping(label, i) layout.addWidget(label) self.signalMapper.mapped.connect(self.showUnit) self.setLayout(layout) def showUnit(self, args): print(args) if __name__ == "__main__": app = QtGui.QApplication(sys.argv) window = MainWidget() window.resize(640, 480) window.show() sys.exit(app.exec_())
Офлайн
Уже давно юзаю способ с наследником QLabel, но как в этом примере организовать передачу координат курсора в showUnit?
Координаты которые можно получить в mouseReleaseEvent - e.x() и e.y()
Офлайн