PyQt更改光标、鼠标移入移出更改控件效果

鼠标事件

  • 做GUI编程很常见的一个需求,要将按钮或者其他控件的光标移入、移出、按压时三种情况的控件样式都不一样,有些人把这三种情况叫做控件的三态
  • 另一种情况需要更改光标的样式

光标

  • 更改鼠标移入光标

    self.btn.setCursor(QCursor(Qt.PointingHandCursor))
    
    参数效果
    PointingHandCursor变为手型
    CrossCursor变为十字型
    ArrowCursor变为箭头型
    UpArrowCursor变为向上箭头型
    IBeamCursor变为文本输入型
    WaitCursor变为等待型
    BusyCursor变为繁忙型
    ForbiddenCursor变为禁止型
    WhatsThisCursor变为问号型
    SizeVerCursor变为垂直拖拽型
    SizeHorCursor变为水平拖拽性
    SizeBDiagCursor变为对角线调整大小型
    SizeAllCursor变为移动对象型
    SplitHCursor变为水平拆分型
    SplitVCursor变为垂直拆分型
    OpenHandCursor变为打开型
    ClosedHandCursor变为关闭型
    BlankCursor变为空白型

鼠标移入事件

  • 如果想要将控件的鼠标移入或者移出绑定函数、搞自己的功能,那就得写一个类继承此控件(QLable、QPushButton)然后重写此类的相关方法

    class MyBtn(QPushButton):
        def __init__(self, text):
            super().__init__(text)
        
        def mouseMoveEvent(self, e):
            print("ok")
        
        def mousePressEvent(self, e):
            print("Not Ok")
        
        def enterEvent(self, a0):
            print("123")
            return super().enterEvent(a0)
        
        def leaveEvent(self, a0):
            print("321")
            return super().leaveEvent(a0)
    
  • 相关事件总结(由于个人时间有限无法全部查找测试其功能,这里整理了常用的一部分,都是简单英文组合,应该不难懂)

    事件作用
    enterEvent鼠标移入触发
    leaveEvent鼠标离开触发
    mouseDoubleClickEvent鼠标双击点击触发
    mouseMoveEvent鼠标移动触发
    mousePressEvent鼠标按压触发
    mouseReleaseEvent鼠标释放触发
    keyPressEvent键盘按下触发
    keyReleaseEvent键盘释放触发
    closeEvent关闭时触发
    resizeEvent设置大小时触发
    showEvent显示控件时触发
    dragLeaveEvent
    dragMoveEvent
    dropEvent
    focusInEvent
    focusOutEvent
    hideEvent
    inputMethodEvent
    installEventFilter
    customEvent
    dragEvent
    actionEvent
    changeEvent
    childEvent
    contextMenuEvent
    moveEvent
    nativeEvent
    paintEvent
    removeEventFliter
    tabletEvent
    timerEvent
    wheelEvent
  • 详细代码

    from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QVBoxLayout
    from PyQt5.QtGui import QCursor, QMouseEvent
    from PyQt5.QtCore import Qt
    import sys
    
    
    class testWindow(QWidget):
        def __init__(self):
            super().__init__()
    
            self.btn1 = QPushButton("btn1")
            self.btn2 = QPushButton("btn2")
            self.btn3 = MyBtn(text="btn3")
            self.btn1.setCursor(QCursor(Qt.PointingHandCursor))
            self.btn2.setCursor(QCursor(Qt.CrossCursor))
            self.btn3.event
    
            self.layout = QVBoxLayout()
    
            self.layout.addWidget(self.btn1)
            self.layout.addWidget(self.btn2)
            self.layout.addWidget(self.btn3)
    
            self.setLayout(self.layout)
    
        def test(self):
            print("ok")
    
    class MyBtn(QPushButton):
        def __init__(self, text):
            super().__init__(text)
        
        def mouseMoveEvent(self, e):
            print("ok")
        
        def mousePressEvent(self, e):
            print("Not Ok")
        
        def enterEvent(self, a0):
            print("123")
            return super().enterEvent(a0)
        
        def leaveEvent(self, a0):
            print("321")
            return super().leaveEvent(a0)
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        w = testWindow()
        w.show()
        sys.exit(app.exec_())
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值