PyQt - QLabel наследование - PullRequest
2 голосов
/ 07 июня 2009

Я хочу наследовать QLabel, чтобы добавить туда обработку событий клика. Я пытаюсь этот код:

class NewLabel(QtGui.QLabel):
    def __init__(self, parent):
        QtGui.QLabel.__init__(self, parent)

    def clickEvent(self, event):
        print 'Label clicked!'

Но после нажатия у меня нет строки «Метка нажата!»

EDIT:

Хорошо, теперь я использую не «clickEvent», а «mousePressEvent». И у меня все еще есть вопрос. Как я могу узнать, на какую именно метку нажали? Например, у меня есть 2 поля ввода и 2 метки. Содержимое меток - это растровые изображения. Так что в ярлыках нет текста, поэтому я не могу различить разницу между ярлыками. Как я могу это сделать?

EDIT2: Я сделал этот код:

class NewLabel(QtGui.QLabel):
    def __init__(self, firstLabel):
        QtGui.QLabel.__init__(self, firstLabel)

    def mousePressEvent(self, event):
        print 'Clicked'
        #myLabel = self.sender()  # None =)
        self.emit(QtCore.SIGNAL('clicked()'), "Label pressed")

В другом классе:

self.FirstLang = NewLabel(Form)
QtCore.QObject.connect(self.FirstLang, QtCore.SIGNAL('clicked()'), self.labelPressed)

Слот того же класса:

def labelPressed(self):
    print 'in labelPressed'
    print self.sender()

Но в себе нет объекта-отправителя. Что я сделал не так?

Ответы [ 3 ]

1 голос
/ 08 июня 2009

Отвечая на ваш второй вопрос, я продолжу на примере @gnud:

  • подкласс QLabel, переопределите mouseReleaseEvent и добавьте сигнал в класс, назовем его clicked.
  • проверить, какая кнопка была нажата в mouseReleaseEvent, если она слева, издает сигнал щелчка.
  • подключите слот к сигналу нажатия ярлыков и используйте sender () внутри, чтобы узнать, какой клик QLabel был нажат.
1 голос
/ 27 января 2012

Ответ от PyQt Wiki работает очень хорошо, но я бы добавил, что класс clickable должен вызывать widget.mouseReleaseEvent (прямо перед return True), на тот случай, если пользователь настроил это событие .

1 голос
/ 08 июня 2009

В QWidget / QLabel нет функции clickEvent. Вы можете подключить эту функцию к сигналу Qt или сделать:

class NewLabel(QtGui.QLabel):
    def __init__(self, parent=None):
        QtGui.QLabel.__init__(self, parent)
        self.setText('Lorem Ipsum')

    def mouseReleaseEvent(self, event):
        print 'Label clicked!'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...