EventFilter中的问题,带有QlLineEdit中的Alt / Shift修饰符

问题描述 投票:0回答:1

从QLineEdit,如果我按:

  1. Ctrl + S,效果很好

  2. 但同时,如果我按Alt + CShift + 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()
python pyqt pyqt5 qlineedit
1个回答
0
投票

如果您不想让文本不出现在QLineEdit中,那么您必须使事件不发送到QLineEdit,对于事件过滤器,只需返回True,例如:

# ...
if event.key() == Qt.Key_C and event.modifiers() == Qt.AltModifier:
    print("Alt + C")
    return True
# ...
© www.soinside.com 2019 - 2024. All rights reserved.