EventFilter 中的问题,使用来自 QLineEdit 的 Alt /Shift 修饰符
Problem in EventFilter, with Alt /Shift modifiers from QLineEdit
在 QLineEdit 中,如果我按:
Ctrl + S, 效果很好
但同时,如果我按 Alt + C,或 Shift +S(根据我的代码)
事件过滤器工作正常,但同时 QLineEdit 框更新了那个按键。
例如,如果我从 QLineEdit 中按 Alt+C,我的字母 "C" updated/appeared QLineEdit 然后按Shift+S,在QLineEdit中,字母"S"是updated/appeared.
如何避免?
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,在事件过滤器的情况下,只需return True,例如:
# ...
if event.key() == Qt.Key_C and event.modifiers() == Qt.AltModifier:
print("Alt + C")
<b>return True</b>
# ...
在 QLineEdit 中,如果我按:
Ctrl + S, 效果很好
但同时,如果我按 Alt + C,或 Shift +S(根据我的代码)
事件过滤器工作正常,但同时 QLineEdit 框更新了那个按键。
例如,如果我从 QLineEdit 中按 Alt+C,我的字母 "C" updated/appeared QLineEdit 然后按Shift+S,在QLineEdit中,字母"S"是updated/appeared.
如何避免?
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,在事件过滤器的情况下,只需return True,例如:
# ...
if event.key() == Qt.Key_C and event.modifiers() == Qt.AltModifier:
print("Alt + C")
<b>return True</b>
# ...