Python PyQt5 - QEvent 按键执行两次
Python PyQt5 - QEvent Keypress executes double times
我有这个简单的代码,当 ESC 键按下 PRINTS 时,它似乎执行 "double" 次而不是只触发一次。 Python 3.6.2 x86 + PyQt 5.9
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5 import QtCore, QtGui, QtWidgets
class MainWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
qApp.installEventFilter(self) #keyboard control
def eventFilter(self, obj, event):
if (event.type() == QtCore.QEvent.KeyPress):
key = event.key()
if key == Qt.Key_Escape:
print("Escape key")
return super(MainWindow, self).eventFilter(obj, event)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
安装在 QApplication
上的事件过滤器将接收应用程序中 所有 对象的事件。因此,您需要检查 obj
参数以从您不感兴趣的对象中过滤掉事件。
在您的示例中,您可能只需要来自主 window 的事件。所以你可以这样修复它:
def eventFilter(self, obj, event):
if (event.type() == QtCore.QEvent.KeyPress and obj is self):
...
我有这个简单的代码,当 ESC 键按下 PRINTS 时,它似乎执行 "double" 次而不是只触发一次。 Python 3.6.2 x86 + PyQt 5.9
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5 import QtCore, QtGui, QtWidgets
class MainWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
qApp.installEventFilter(self) #keyboard control
def eventFilter(self, obj, event):
if (event.type() == QtCore.QEvent.KeyPress):
key = event.key()
if key == Qt.Key_Escape:
print("Escape key")
return super(MainWindow, self).eventFilter(obj, event)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
安装在 QApplication
上的事件过滤器将接收应用程序中 所有 对象的事件。因此,您需要检查 obj
参数以从您不感兴趣的对象中过滤掉事件。
在您的示例中,您可能只需要来自主 window 的事件。所以你可以这样修复它:
def eventFilter(self, obj, event):
if (event.type() == QtCore.QEvent.KeyPress and obj is self):
...