如果我按任何键,什么也不会发生。如何实施?我注意到,如果我按了某个键(第一次/非常乞讨/第一个字符),在文本框中显示被按下的字符需要更多的时间。如何解决
from PyQt5 import QtWidgets,QtCore,QtGui
class MyKey(QtWidgets.QWidget):
def __init__(self):
super(). __init__()
self.setWindowTitle(" My Key Board")
self.ui()
def ui(self):
self.tb = QtWidgets.QLineEdit()
self.vb = QtWidgets.QVBoxLayout()
self.vb.addWidget(self.tb)
self.setLayout(self.vb)
def keyPressEvent(self, e):
print("key pressed")
print(e.key())
if type(e) == QtGui.QKeyEvent:
if e.key() == QtCore.Qt.Key_A:
print("ypu pressed 'A'")
if __name__ == "__main__":
import sys
myapp = QtWidgets.QApplication(sys.argv)
mywindow = MyKey()
mywindow.show()
sys.exit(myapp.exec_())
在Qt中,KeyPressEvent仅发送到具有焦点的小部件,如果它使用了焦点,则事件不会发送到父小部件,否则也会通知父小部件
在本例中,QLineEdit是具有焦点并使用具有文本、数字和一些特殊键的事件的小部件,因此在这些情况下不会通知父小部件。QLineEdit没有使用其他键,例如父窗口小部件接收到的F2、Escape等
如果您想收听一个特殊的键或键的组合,则必须使用
QShortcut
但是因为OP想要监听所有事件,所以一个可能的解决方案是在与窗口相关联的QWindow上安装一个eventfilter,如果它在窗口具有焦点时接收到键盘事件,则不管哪个小部件具有焦点相关问题 更多 >
编程相关推荐