2017-07-30 120 views
0

下面的代码创建一个具有三行标签的小部件。 每次将鼠标放置在其中一个标签上时,我希望鼠标光标从默认的“箭头”更改为“手形”图标。如何实现它?如何使用标签跟踪鼠标输入事件

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_() 

回答

1

您可以直接使用此方法在标签类来设置光标:

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

self.setCursor(QCursor(Qt.PointingHandCursor)) 

要检测,当鼠标进入一个widget ,诀窍是将setMouseTracking定义为True,然后是事件可触发:

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