Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Catray от Октябрь 19, 2021, 18:55



Название: PyQt5 обработка событий (Events), событие и его источник
Отправлено: Catray от Октябрь 19, 2021, 18:55
Здравствуйте. Пишу GUI программу на Python, мне необходимо узнать в процедуре-обработчике какое событие (Нажатие, удержание, отпускание клавиши) произошло?

Код:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
app = QApplication(sys.argv)
MainWindow = QMainWindow()
MainWindow.resize(300,300)
btn = QPushButton('test',MainWindow)
btn.setObjectName('Button1')
def ButtonsOnclick():
    global MainWindow
    print('Click')
    print(MainWindow.sender().objectName())
btn.clicked.connect(ButtonsOnclick)

MainWindow.show()
sys.exit(app.exec_())

Источник события я знаю как найти - MainWindow.sender(), но как получить событие?


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: kambala от Октябрь 19, 2021, 23:15
тебе надо смотреть в сторону QEvent и eventFilter


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: Catray от Октябрь 20, 2021, 11:29
тебе надо смотреть в сторону QEvent и eventFilter

Смотрел, не понимаю как прикрутить.


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: kambala от Октябрь 20, 2021, 12:02
унаследуйся от QMainWindow, перенеси создание кнопки внутрь, вместо btn.clicked.connect(ButtonsOnclick) используй btn.installEventFilter(self), добавь метод eventFilter и в нем обрабатывай только нужные QEvent. см. документацию к installEventFilter и eventFilter для подробностей.


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: Catray от Октябрь 22, 2021, 00:52
унаследуйся от QMainWindow, перенеси создание кнопки внутрь, вместо btn.clicked.connect(ButtonsOnclick) используй btn.installEventFilter(self), добавь метод eventFilter и в нем обрабатывай только нужные QEvent. см. документацию к installEventFilter и eventFilter для подробностей.

А без парадигм ООП-наследования, невозможно? :o ???


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: __Heaven__ от Октябрь 22, 2021, 09:11
Врядли
Нужно либо класс кнопки переопределять, либо класс, который будет получать события кнопки (eventFilter)


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: kambala от Октябрь 22, 2021, 11:41
унаследуйся от QMainWindow, перенеси создание кнопки внутрь, вместо btn.clicked.connect(ButtonsOnclick) используй btn.installEventFilter(self), добавь метод eventFilter и в нем обрабатывай только нужные QEvent. см. документацию к installEventFilter и eventFilter для подробностей.

А без парадигм ООП-наследования, невозможно? :o ???
ты от них все равно никуда не денешься в программах сложнее hello world


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: Авварон от Октябрь 24, 2021, 15:42
ты от них все равно никуда не денешься в программах сложнее hello world

лисп хихикает в сторонке


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: kambala от Октябрь 24, 2021, 18:16
ты от них все равно никуда не денешься в программах сложнее hello world

лисп хихикает в сторонке
Qt bindings for Lisp? =) речь же не о любом ЯП.


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: Catray от Октябрь 25, 2021, 11:42
Врядли
Нужно либо класс кнопки переопределять, либо класс, который будет получать события кнопки (eventFilter)

Поможете с реализацией второго варианта?
Цитировать
либо класс, который будет получать события кнопки (eventFilter)


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: Igors от Октябрь 25, 2021, 13:39
лисп хихикает в сторонке
[off]Классный язык, в свое время года полтора писал на AutoLISP. Вначале долго "лупал глазками", напр "..присваивает выражение не вычисляя его" - это как ??? Но потом в кайф [/off]


Название: Re: PyQt5 обработка событий (Events), событие и его источник
Отправлено: kambala от Октябрь 25, 2021, 16:00
Поможете с реализацией второго варианта?
в документации очень доступно всё описано, что читать я тебе уже написал выше