从QLineEdit,如果我按:
Ctrl + S,效果很好
但同时,如果我按Alt + C或Shift + S(根据我的代码),
事件过滤器工作正常,但与此同时QLineEdit Box已使用该按键更新。
例如,如果我从QLineEdit按Alt + C,则字母“ C”更新/出现在我的QLineEdit中,然后按Shift + S,在QLineEdit中,字母“ S”已更新/出现。
如何避免呢?
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class textbox_keypress(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("List Box Example")
self.mydesign()
# ----------------------------------------------------------------------------------
def mydesign(self):
self.textbox = QLineEdit(self)
self.textbox.setGeometry(10,10,300,30)
self.textbox.installEventFilter(self)
def eventFilter(self, source, event):
if event.type() == QEvent.KeyPress and source is self.textbox:
if event.modifiers() == Qt.ControlModifier and event.key() == Qt.Key_S:
print("Control + S")
if event.key() == Qt.Key_C and event.modifiers() == Qt.AltModifier:
print("Alt + C")
if event.key() == Qt.Key_E and event.modifiers() == Qt.ShiftModifier:
print("Shift + E ")
return super(textbox_keypress, self).eventFilter(source,event)
# ----------------------------------------------------------------------------------
def main():
myapp = QApplication(sys.argv)
mywindow = textbox_keypress()
mywindow.show()
sys.exit(myapp.exec_())
if __name__ =="__main__":
main()
如果您不想让文本不出现在QLineEdit中,那么您必须使事件不发送到QLineEdit,对于事件过滤器,只需返回True,例如:
# ...
if event.key() == Qt.Key_C and event.modifiers() == Qt.AltModifier:
print("Alt + C")
return True
# ...