Filyushin
@Filyushin
Delphi, Firebird, Python, MySQL

Как передать доп. данные в контрол и потом это считать в обработчике событий?

Python 2.7, PyQt4
Создаю контролы в цикле:
water = QPixmap ("images//water.png")
for position in positions:
            label = QLabel()
            label.mousePressEvent = self.labelClicked
            label.setPixmap(water)
            label.setToolTip(str(position[0]) + str(position[1]))
            label.answer = position

    def labelClicked(self, event):
        sender = self.sender()
        a = sender.answer[0]
        self.setWindowTitle(str(a))


Пытаюсь в событии получить данные нажатой QLabel.
до этого был вариант субклассинга так же не работает. На выходе в отладчике параметр имеет None.
Пробовал копировать position через copy.copy(position).
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 1
Avernial
@Avernial
Разрабатываю научное ПО на языке Python.
А почему у вас не заработало с наследованием?

Попробуйте вот такой пример с использованием наследования и сигналов:

from PyQt4 import QtGui, Qt


class MyLabel(QtGui.QLabel):
    clicked = Qt.pyqtSignal(str)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def mousePressEvent(self, *args, **kwargs):
        self.clicked.emit(self.text())
        return QtGui.QLabel.mousePressEvent(self, *args, **kwargs)


class Main(QtGui.QWidget):

    def __init__(self):
        super().__init__()
        layout = QtGui.QVBoxLayout(self)
        for i in range(5):
            label = MyLabel(self, "Label " + str(i))
            label.clicked.connect(self.set_title)
            layout.addWidget(label)
        self.resize(300, 300)

    def set_title(self, label):
        self.setWindowTitle(label)

if __name__ == '__main__':
    app = Qt.QApplication([])
    m = Main()
    m.show()
    app.exec()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы