Как отловить потерю фокуса Qwidget'а (PyQt5)?

Как отловить потерю фокуса Qwidget'а (PyQt5).
Необходимо закрыть приложение при потере им фокуса.


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

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

void QApplication::focusChanged(QWidget *old, QWidget *now)

Этот сигнал испускается, когда виджет, который имеет фокус клавиатуры, изменился со старого на настоящий, т.е. когда пользователь нажал клавишу табуляции, щелкнул виджет или изменил активное окно.
И старое, и настоящее могут быть nullptr.

import sys
from PyQt5.Qt import *


class MyGui(QWidget):
    def __init__(self):
        super().__init__()
        
        self.setFocus()
        app.focusChanged.connect(self.onFocusChanged)


    def onFocusChanged(self):
        print(f' Окно активное (сфокусировано ли окно или нет) ? -> `{self.isActiveWindow()}`')
        
        if not self.isActiveWindow():
            self.close()

        
if __name__ == "__main__":
    app = QApplication(sys.argv)
    gui = MyGui()
    gui.show()
    sys.exit(app.exec_())

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

→ Ссылка