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"
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值