PyQt4中自定義事件

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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章