События мыши в PyQT5

Каким образом нужно переопределить методы mouseEvent, чтобы стало возможным изменение цвета кнопки только по нажатию на нее мышью (то есть не "нажал и отпустил", а "нажал и удерживаешь")?


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

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

Вам надо переопределить два метода:

class PushButton(QPushButton):
    def __init__(self, parent=None):
        super(PushButton, self).__init__(parent)

    def mousePressEvent(self, event):
        print('mousePressEvent')

    def mouseReleaseEvent(self, event):
        print('mouseReleaseEvent')

Update

можете подсказать как именно нужно переопределить mouseReleaseEvent, я пытался и у меня не вышло. не знаю как обработать именно нажатие и удерживание

Переопределять методы надо в классе наследованном от QPushButton

import sys
from PyQt5.Qt import *


class PushButton(QPushButton):
    def __init__(self, parent=None):
        super(PushButton, self).__init__(parent)
        self.setText('Button')

    def mousePressEvent(self, event):
        print('mousePressEvent')
        self.setStyleSheet('background: #3A4256;')

    def mouseReleaseEvent(self, event):
        print('mouseReleaseEvent')
        self.setStyleSheet('')


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.btn = PushButton(self) 
        self.setCentralWidget(self.btn)

app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())

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

→ Ссылка