PyQt4中自定义鼠标移动事件
重写事件过滤器
通过在全局或者相应的widget重写事件过滤器,并对事件进行判断来重新定义鼠标移动事件
该方法的优点是扩展性高,适合需要重写多个事件的场景
- 首先在主方法中添加代码
'''在__main__方法中启动过滤器'''
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
filmerBase = FilmerBase()
filmerBase.show()
app.installEventFilter(filmerBase) #为重写事件过滤器的设置
sys.exit(app.exec_())
- 接着重新定义类的事件过滤器
'''重写鼠标过滤器,提示鼠标位置'''
def eventFilter(self,source,event):
if event.type() == QtCore.QEvent.MouseMove:
if event.button() == QtCore.Qt.NoButton: #没有点击鼠标
pos = event.pos()
self.setToolTip('x: %d, y: %d' % (pos.x(), pos.y()))
else:
pass #添加其他代码
重写鼠标移动事件
和第一种方法不同,此方法直接定义需要重写的类方法,不需要过滤判断事件
这种方法的优点是可以针对性的自定义功能,比较简便,不需要在开始进行全局设置,但不适合进行复杂的开发
- 直接定义类方法
值得注意的是,鼠标移动事件需要激活鼠标轨道追踪,否则无点击移动鼠标不会触发事件
class TasksCookie(QtGui.QWidget):
def __init__(self):
super(TasksCookie,self).__init__()
self.setupUi()
self.setMouseTracking(True) #激活鼠标轨道追踪
'''重写鼠标悬浮移动事件'''
def mouseMoveEvent(self,event):
if event.buttons() == QtCore.Qt.NoButton: #鼠标无点击拖动
pos = event.pos()
self.setToolTip('x: %d, y: %d' % (pos.x(), pos.y()))
elif event.buttons() == QtCore.Qt.LeftButton: #鼠标左击拖动
print "Left click drag"
elif event.buttons() == QtCore.Qt.RightButton: #鼠标右击拖动
print "Right click drag"