如何捕获PyQt5 QMainWindow失去焦点

时间:2019-06-15 18:00:45

标签: python pyqt5

我要实现的目标:如果用户在QMainWindow之外单击,则窗口应该隐藏。

我如何解决此问题:找到一种方法来确定QMainWindow是否失去焦点,如果这样,请使用后续功能隐藏窗口。

不幸的是,我无法完全掌握如何实现这一目标。

可以使用Qt :: Popup标志完成此操作,但是我无法为QMainWindow包含的小部件提供任何键盘输入。

1 个答案:

答案 0 :(得分:2)

  

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

     

当具有键盘焦点的窗口小部件从旧更改为现在时,即由于用户按下Tab键,单击窗口小部件或更改了活动窗口,则发出此信号。旧的和现在的都可以作为空指针。

import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class MyWin(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.setFocus()
        QtWidgets.qApp.focusChanged.connect(self.on_focusChanged)       

    @QtCore.pyqtSlot("QWidget*", "QWidget*")
    def on_focusChanged(self, old, now):

        if now == None:
            print(f"\nwindow is the active window: {self.isActiveWindow()}")

            # window lost focus
            # do what you want

            self.setWindowState(QtCore.Qt.WindowMinimized)

        else: print(f"window is the active window: {self.isActiveWindow()}")


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = MyWin() 
    MainWindow.show()
    sys.exit(app.exec_())