Pyqt5检测QMainWidnow窗口失焦并关闭窗口(非重载focusOutEvent)
非重载focusOutEvent,这似乎只能针对窗口内的控件才有用
对于QMainWindow窗口失去焦点的检测,你可以使用事件过滤器(event filter)来实现。通过事件过滤器,你可以在窗口接收到失去焦点的事件时做出相应的操作,比如关闭窗口。
下面是一个使用事件过滤器关闭QMainWindow窗口的示例代码:
from PyQt5.QtCore import Qt, QObject, QEvent
from PyQt5.QtWidgets import QApplication, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 在窗口安装事件过滤器
self.installEventFilter(self)
def eventFilter(self, obj: QObject, event) -> bool:
if event.type() == QEvent.WindowDeactivate:
# 当窗口失去焦点时关闭窗口
self.close()
return super().eventFilter(obj, event)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
在这个示例中,我们重写了QMainWindow的eventFilter方法,并在该方法内判断窗口是否接收到了失去焦点的事件(QEvent.WindowDeactivate)。当窗口接收到失去焦点的事件时,我们调用self.close()关闭窗口。