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