在子类化的PyQT LineEdit中正确处理keyPressEvent

4 投票
1 回答
4469 浏览
提问于 2025-04-16 12:06

我有一个 QLineEdit(就是一个可以输入文本的框),我想要捕捉到按下 Shift 键的动作。

这是我的代码:

class NoteText(QtGui.QLineEdit):
    def __init__(self, parent):
        super (NoteText, self).__init__(parent)

    def keyPressEvent(self, event):
        if (event.modifiers() & QtCore.Qt.ShiftModifier):
            self.shift = True
            print 'Shift!'

你可以猜到,我可以捕捉到 Shift 键的按下,但这样一来就无法在这个输入框里输入文字了。我尝试过捕捉按键,但我不太确定该怎么处理这些按键,以便用户可以继续在这个框里输入。

我缺少了什么呢?谢谢!

1 个回答

6

我想你是想要重写的 keyPressEvent 方法的默认行为,那么你应该调用基类的实现,像这样:

def keyPressEvent(self, event):
    if (event.modifiers() & QtCore.Qt.ShiftModifier):
        self.shift = True
        print 'Shift!'
    # call base class keyPressEvent
    QtGui.QLineEdit.keyPressEvent(self, event)

希望这能帮到你,祝好!

撰写回答