Найти - Пользователи
Полная версия: PyQT. Клик мыши передаётся вниз.
Начало » GUI » PyQT. Клик мыши передаётся вниз.
1
Gradient
Приложение должно закрываться по клику правой кнопки. Мой обработчик:
    def mousePressEvent(self, event):
if event.buttons() == QtCore.Qt.RightButton:
exit()
Но получается так, что то, что находилось под моим окном, тоже получает правый клик, вываливая контекстное меню. Как бы сообщить, что клик обработан и его надо дропнуть с закрытием приложения? Я пробовал event присваивать None, но эффекта от этого никакого. Как бы это дело забороть?
dartNNN
Думаю стоит посмотреть вот на этот момент из доков
A mouse event contains a special accept flag that indicates whether the receiver wants the event. You should call ignore() if the mouse event is not handled by your widget. A mouse event is propagated up the parent widget chain until a widget accepts it with accept(), or an event filter consumes it.
Если коротко, то вызывай event.accept() и будет тебе счастье:) сам не проверял
pasaranax
по-моему, как раз наоборот, нужно выполнить то что нужно, а дальше event.ignore()
    def mousePressEvent(self, event):
if event.buttons() == QtCore.Qt.RightButton:
exit()
event.ignore()
хотя, я тоже сам не проверял :) но решение точно где-то здесь
dartNNN
Так вроде ignore() - значит не обрабатывать событие, а передать его родительскому классу. Я же выше цитировал доки там английским языком написано, что событие будет передаваться родительскому классу, пока оно не будет принято (accept) или отброшено фильтром.
Gradient
Да чего-то accept не помогает вообще никак. Может, у меня с “главным” окном что-нибудь… Пока копаю в этом направлении. Но применение WA_MousePropagation и WA_NoMousePropagation тоже результатов не приносят.

В доке есть “A mouse event is propagated up the parent widget chain until a widget accepts it with accept(), or an event filter consumes it.” По ходу, где-то должен быть фильтр. Или accept надо вызывать не из события. В общем, идеи есть, но если вы знаете, как правильно, - не стесняйтесь продолжать ветку.
Gradient
Я, вроде, догадался что происходит: по MOUSE_DOWN моё приложение закрывается. Но то, что под ним, получает MOUSE_UP при отпускании кнопки. Отсюда и контекстное меню.

Но что-то не могу найти, а как написать реакцию на отпускание мыши? mouseReleaseEvent по аналогии с mousePressEvent чего-то нету. Может, надо “вручную” сигнал к слоту прикручивать? К какому тогда слоту? И какие параметры должны быть у сигнала? Чего-то я не догоняю в терминах PyQt, в терминах winAPI: как мне привязать мою процедуру к сообщению WM_MOUSE_UP?
dartNNN
Подождите. Как это mouseReleaseEvent нету? А что же я тогда наблюдаю сейчас у себя в соседнем окне? :) (доки открыты на странице с mousePressEvent и mouseReleaseEvent):)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB