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"