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.
1 2 3 4 5 6 7 8 9 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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_()) |