如何捕捉PyQt5 QMainWindow失去焦点

2024-05-16 15:29:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要实现的是:如果用户在qmain窗口外单击,那么窗口应该隐藏起来。你知道吗

我是如何解决这个问题的:找到一种方法来确定QMainWindow是否失去了焦点,如果是,使用followup函数隐藏窗口。你知道吗

不幸的是,我不能完全掌握如何实现这一点。你知道吗

可以使用标志Qt::Popup来完成,但是我不能给QMainWindow包含的小部件提供任何键盘输入。你知道吗


Tags: 方法函数用户部件标志qt焦点popup
1条回答
网友
1楼 · 发布于 2024-05-16 15:29:26

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

This signal is emitted when the widget that has keyboard focus changed from old to now, i.e., because the user pressed the tab-key, clicked into a widget or changed the active window. Both old and now can be the null-pointer.

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_())

相关问题 更多 >