2017-07-30 9 views
0

Le code ci-dessous crée un widget unique avec trois étiquettes sur une ligne. Je voudrais que le curseur de la souris passe d'une "flèche" par défaut à une icône "main" chaque fois que la souris est positionnée sur l'une des étiquettes. Comment l'atteindre?Comment suivre l'événement de saisie de la souris avec Label

enter image description here

enter image description here

class SquareLabel(QLabel): 
    def __init__(self, parent=None): 
     super(SquareLabel, self).__init__(parent) 
     self.setAutoFillBackground(True) 
     p = self.palette() 
     p.setColor(self.backgroundRole(), QColor(223, 230, 248)) 
     self.setPalette(p) 

    def mousePressEvent(self, event): 
     print event 


class SuperEdit(QWidget): 
    def __init__(self, data, parent=None): 
     super(SuperEdit, self).__init__(parent) 

     layout = QHBoxLayout() 
     layout.setContentsMargins(2, 2, 2, 2) 
     self.setLayout(layout) 

     for name in data: 
      label = SquareLabel(self) 
      label.setText(name) 
      layout.addWidget(label) 


if __name__ == '__main__': 
    names = ['Name 1', 'Name 2', 'Name 3'] 
    app = QApplication([]) 
    editor = SuperEdit(names) 
    editor.show() 
    app.exec_() 

Répondre

1

Vous pouvez utiliser cette méthode directement dans la classe d'étiquettes pour définir un curseur:

from PyQt5.QtGui import QCursor 
from PyQt5.QtCore import Qt 

self.setCursor(QCursor(Qt.PointingHandCursor)) 

Pour détecter quand la souris entrer un widget , l'astuce consiste à définir setMouseTracking à True, puis l'événement peut être déclenché:

class SquareLabel(QLabel): 
    def __init__(self, parent=None): 
     super(SquareLabel, self).__init__(parent) 
     self.setAutoFillBackground(True) 
     p = self.palette() 
     p.setColor(self.backgroundRole(), QColor(223, 230, 248)) 
     self.setPalette(p) 
     self.setMouseTracking(True) 

    def mouseMoveEvent(self, event): 
     print "On Hover" # event.pos().x(), event.pos().y() 

    def mousePressEvent(self, event): 
     print event