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.WindowActivate
和 QEvent.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_()
我试图在我的应用程序失去焦点时收到通知。但是简单地重新实现“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.WindowActivate
和 QEvent.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_()