def eventFilter(self, _, event: QEvent) -> bool: """Receive events for a QLineEdit and if enter is pressed start completion. Always returns False to indicate the target object should still process the event. """ if not isinstance(event, QKeyEvent): return False lineedit = self._lineedit completer = lineedit.completer() if event.key() == Qt.Key_Return: # if completion list is of len = 1, accept the completion else continue if completer.completionCount() == 1: completion_text = completer.currentCompletion() if completion_text != lineedit.currentText(): # manually emit the code completion signal completer.activated.emit(completion_text) elif event.key() in [Qt.Key_Down, Qt.Key_Up]: # If up or down pressed, start the completer completer.complete() return False
def event(self, ev: QEvent) -> bool: # Tab: Insert 4 spaces # Arrow Up/Down: select a line from the history buffer # Newline: Emit returned signal if ev.type() == QEvent.KeyPress: if ev.key() == Qt.Key_Tab: self.insert(' ' * 4) return True elif ev.key() == Qt.Key_Backtab: ccp = self.cursorPosition() tl = self.text()[:ccp] tr = self.text()[ccp:] ends_with_tab = re.match(r"(.*)\s\s\s\s$", tl) if ends_with_tab: self.setText(tl[:-4] + tr) self.setCursorPosition(ccp - 4) return True elif ev.key() == Qt.Key_Up: self.recall(self.hist_index - 1) return True elif ev.key() == Qt.Key_Down: self.recall(self.hist_index + 1) return True elif ev.key() == Qt.Key_Return: if len(self.text()) == 0 and ev.modifiers( ) == Qt.ControlModifier: self.open_text_edit() else: self.returnkey() return True return super().event(ev)
def _handle_edit(self, event: QtCore.QEvent): """Handle closing edit box and redisplayin label""" if event.type() == QtCore.QEvent.Type.KeyPress: key = event.key() if key in (QtCore.Qt.Key.Key_Return, QtCore.Qt.Key.Key_Enter): if not self.edit.hasAcceptableInput(): self.setCurrentWidget(self.label) return self.label.setText(self.edit.text()) self.setCurrentWidget(self.label) self.valueChanged.emit(self.label.text()) if key == QtCore.Qt.Key.Key_Escape: self.setCurrentWidget(self.label) elif event.type() == QtCore.QEvent.FocusOut: self.setCurrentWidget(self.label)
def keyPressEvent(self, evt: QtCore.QEvent) -> None: super(PLineEdit, self).keyPressEvent(evt) if (evt.key() == QtCore.Qt.Key_Return or evt.key() == QtCore.Qt.Key_Enter) and self.suppress_enter: evt.accept()