您现在的位置是:网站首页 > 博客日记 >

PySide2鼠标延迟触发效果

作者:YXN-python 阅读量:17 发布日期:2024-11-05

from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel
from PySide2.QtCore import QTimer
from PySide2.QtGui import QMouseEvent


class MyWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.initUI()

        # 初始化两个定时器
        self.enter_timer = QTimer()
        self.leave_timer = QTimer()

        # 连接定时器的timeout信号到对应的槽函数
        self.enter_timer.timeout.connect(self.mouseEntered)
        self.leave_timer.timeout.connect(self.mouseLeft)

        # 设置鼠标进入和离开的超时时间
        self.enter_timer.setSingleShot(True)
        self.leave_timer.setSingleShot(True)
        self.enter_timer.setInterval(1000)  # 1秒
        self.leave_timer.setInterval(2000)  # 2秒

        # 添加一个标签用于显示和隐藏
        self.label = QLabel("Mouse is here!", self)
        self.label.hide()  # 初始时隐藏

        # 使用布局管理器来管理小部件的位置
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        self.setLayout(layout)

    # 初始化界面
    def initUI(self):
        self.frame = QWidget(self)  # 假设frame是一个QWidget
        self.frame.hide()  # 初始时隐藏

    # 鼠标进入事件
    def enterEvent(self, event: QMouseEvent):
        self.enter_timer.start()
        self.leave_timer.stop()

    # 鼠标离开 事件
    def leaveEvent(self, event: QMouseEvent):
        self.leave_timer.start()
        self.enter_timer.stop()

    # 鼠标进入
    def mouseEntered(self):
        # 显示frame和标签
        self.frame.show()
        self.label.show()

    # 鼠标离开
    def mouseLeft(self):
        # 隐藏frame和标签
        self.frame.hide()
        self.label.hide()


if __name__ == '__main__':
    app = QApplication([])
    your_widget = MyWidget()
    your_widget.show()
    app.exec_()

YXN-python

2024-11-05