PyQt4中自定义事件

来源:互联网 发布:贴吧去性别软件 编辑:程序博客网 时间:2024/05/22 06:57

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"
原创粉丝点击