En Qt el widget QLabel no es clicable. Para emular el click del ratón basta añadir una propiedad que use la clase Signal y sobreescribir el evento mouseRelease de QLabel de modo que emita un señal clicked.
class QLabelClickable(QLabel): clicked = pyqtSignal() def __init__(self, *args): QLabel.__init__(self, *args) def mouseReleaseEvent(self, ev): self.clicked.emit()
Y este es el código para probarlo:
class MainWindow(QMainWindow): def label_clicked(self): print "click" def __init__(self, *args): QMainWindow.__init__(self, *args) self.mylabel = QLabelClickable('click me!') self.mylabel.clicked.connect(self.label_clicked) self.setCentralWidget(self.mylabel) app = QApplication(sys.argv) main = MainWindow() main.show() sys.exit(app.exec_())
En este otro ejemplo ahora QLabel incorpora una imagen y además hago uso del antiguo sistema para conectar eventos:
class MainWindow(QMainWindow): def label_clicked(self): print "click" def __init__(self, *args): QMainWindow.__init__(self, *args) self.mylabel = QLabelClickable('') self.mylabel.setPixmap(QPixmap('myimage.png').scaled(10, 10, Qt.KeepAspectRatio)) self.connect(self.mylabel, SIGNAL('clicked()'), self.label_clicked) self.setCentralWidget(self.mylabel) app = QApplication(sys.argv) main = MainWindow() main.show() sys.exit(app.exec_())