def keyPressEvent(self, key_event: QKeyEvent) -> None: if self.completer and self.completer.popup().isVisible(): # The following keys are forwarded by the completer to the widget key = key_event.key() if key in (Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Tab, Qt.Key_Backtab): key_event.ignore() return # let the completer do default behavior is_ctrl_modifier = (key_event.modifiers() & Qt.ControlModifier) != 0 is_shift_modifier = (key_event.modifiers() & Qt.ShiftModifier) != 0 ctrl_or_shift = is_ctrl_modifier or is_shift_modifier is_shortcut = is_ctrl_modifier and key_event.key( ) == Qt.Key_E # CTRL+E if not self.completer or not is_shortcut: # do not process the shortcut when we have a completer QLineEdit.keyPressEvent(self, key_event) if not self.completer or ctrl_or_shift and key_event.text() == '': return eow = "~!@#$%^&*()_+{}|:\"<>?,./;'[]\\-=" # end of word has_modifier = (key_event.modifiers() != Qt.NoModifier) and not ctrl_or_shift completion_prefix = self.text_under_cursor() if not is_shortcut: event_text = key_event.text() if has_modifier or not event_text or len( completion_prefix) < 1 or event_text[-1] in eow: self.completer.popup().hide() return if completion_prefix != self.completer.completionPrefix(): self.completer.setCompletionPrefix(completion_prefix) self.completer.popup().setCurrentIndex( self.completer.completionModel().index(0, 0)) cr = self.cursorRect() cr.setWidth( self.completer.popup().sizeHintForColumn(0) + self.completer.popup().verticalScrollBar().sizeHint().width()) self.completer.complete(cr) # popup it up!
def keyPressEvent(self, event): QLineEdit.keyPressEvent(self, event); if (event.key() == Qt.Key_Return): self.focusOutEvent(QFocusEvent( QEvent.FocusOut, Qt.MouseFocusReason))