Как передать 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 шт):
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_())
