Python 3.x / PySide2 / main window 的 focusOutEvent 没有触发

Python 3.x / PySide2 / focusOutEvent for main window isn't firing

我试图在我的应用程序失去焦点时收到通知。但是简单地重新实现“focusOutEvent”是行不通的。

我发现这是一种解决方法:

PyQt window focus events not called

但如果有一种方法可以简单地以某种方式使用“focusOutEvent”,我仍然很感兴趣。这是一个小示例应用程序,在 focusevents 方面对我没有任何作用。

#!/usr/bin/python3

from PySide2.QtGui import *
from PySide2.QtCore import *
from PySide2.QtWidgets import *
import sys

class MainWindow(QMainWindow):
  def __init__(self):
      super().__init__()
      print("Window created")
  def focusOutEvent(self, e):
      print(e)
      print("window lost focus")

def main():
  app = QApplication(sys.argv)
  window = MainWindow()
  window.show()
  app.exec_()

if __name__ == '__main__':
    main()

您要找的是 QEvent.WindowActivateQEvent.WindowDeactivate

from PySide2 import QtWidgets
from PySide2 import QtCore

class Window(QtWidgets.QMainWindow):

    def event(self, event):
        if event.type() == QtCore.QEvent.WindowActivate:
            print('WindowActivate')
        elif event.type() == QtCore.QEvent.WindowDeactivate:
            print('WindowDeactivate')
        return super().event(event)

if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    window = Window()
    window.show()
    app.exec_()