Как передать QPushButton enterEvent?

Мне необходимо реализовать программу, которая запускает окно с находящейся на нем кнопкой. При наведении мышки на кнопку она должна перемещаться в случайную точку окна.

Для себя я уже открыл событие enterEvent, узнал что его можно подключить к QPushButton (QPushButton.enterEvent(???)).

Однако ни из документации, ни "методом тыка" я так и не понял, что же нужно написать на место вопросительных знаков, чтобы эта вещь заработала. Прошу помощи.

import sys

from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton
from random import randrange as r


def except_hook(cls, exception, traceback):
    sys.__excepthook__(cls, exception, traceback)


class MyWidget(QMainWindow):
    def __init__(self):
        super(MyWidget, self).__init__()
        size = r(300, 800)
        self.setWindowTitle('Убегающая кнопка')
        self.setGeometry(300, 300, size, size)
        self.btn = QPushButton(self)
        self.btn.move(100, 100)
        self.btn.resize(100, 50)
        self.btn_coords = (100, 100)
        self.btn.setText('Нажми меня')
        self.setMouseTracking(True)

    def mouseMoveEvent(self, event):
        pass


if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = MyWidget()
    form.show()
    sys.excepthook = except_hook
    sys.exit(app.exec())

Ответы (1 шт):

Автор решения: S. Nick

void QWidget::enterEvent(QEvent *event)

Этот обработчик событий может быть повторно реализован в подклассе для приема событий ввода виджета, которые передаются в параметре события.
Событие отправляется виджету, когда курсор мыши входит в виджет.

import sys
from random import randint 
from PyQt5.QtWidgets import QApplication, QPushButton, QWidget 


class Button(QPushButton):
    def __init__(self, *args, **kwargs):
        super(Button, self).__init__(*args, **kwargs)

    def enterEvent(self, event):
        super(Button, self).enterEvent(event)
        
        self.move(randint(0, 500), randint(0, 400))


class TestWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super(TestWindow, self).__init__(*args, **kwargs)
        
        self.button = Button('Кнопка', self)
        self.button.move(300, 200)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setStyleSheet("""
    QPushButton {
        border: none;
        font-weight: bold;
        font-size: 16px;
        border-radius: 18px;
        min-width: 140px;
        min-height: 40px;
        background-color: blue; /*white;*/
    }
    """)
    w = TestWindow()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка