def keyPressEvent(self, event): print("Key: " + str(event.key())) print("Modifier: " + str(event.modifiers())) layers = QgsProject.instance().layerTreeRoot().children() selectedLayerIndex = 0 tc = self.textCursor() #msgBox=QMessageBox() #msgBox.setText(str(selection)) #msgBox.exec() if len(layers) > 0 and event.key() == Qt.Key_Space and event.modifiers( ) == Qt.ControlModifier: self.createVarInputDialog() event.accept() return elif len(layers) == 0 and event.key( ) == Qt.Key_Space and event.modifiers() == Qt.ControlModifier: msgBox = QMessageBox() msgBox.setText( "No layer has been loaded in QGIS. Therefore no query variables may be created from a given QGIS layer." ) msgBox.exec() event.accept() return elif (event.key() == Qt.Key_Enter or event.key() == Qt.Key_Return) and not self.completer.popup( ).isVisible() and event.modifiers() == Qt.ControlModifier: self.buildSearchDialog(-1, -1, -1, self, True, True) event.accept() return elif (event.key() == Qt.Key_Enter or event.key() == Qt.Key_Return) and self.completer.popup().isVisible(): self.completer.insertText.emit(self.completer.getSelected()) self.completer.setCompletionMode(QCompleter.PopupCompletion) event.accept() return QPlainTextEdit.keyPressEvent(self, event) seltext = self.textUnderCursor(tc) tc.select(QTextCursor.LineUnderCursor) selline = tc.selectedText().strip() sellinearr = selline.split(" ") if len(sellinearr) == 2 and (sellinearr[0].startswith("?")): print("subject is variable") self.updateCompleterData(list( self.autocomplete["propdict"].keys())) self.changedCompleterSetting = True #msgBox=QMessageBox() #msgBox.setText(str(list(self.autocomplete["completerClassList"].keys()))) #msgBox.exec() elif len(sellinearr) == 3 and (sellinearr[0].startswith("?")): print("subject and predicate") self.updateCompleterData( list(self.autocomplete["clsdict"].keys()) + list(self.autocomplete["completerClassList"].keys())) self.changedCompleterSetting = True #msgBox=QMessageBox() #msgBox.setText(str(list(self.autocomplete["completerClassList"].keys()))) #msgBox.exec() elif self.changedCompleterSetting: self.updateCompleterData( list(self.autocomplete["clsdict"].keys()) + list(self.autocomplete["propdict"].keys()) + list(self.autocomplete["completerClassList"].keys())) self.changedCompleterSetting = False #msgBox=QMessageBox() #msgBox.setText(str(list(self.autocomplete["completerClassList"].keys()))+" - "+str(self.changedCompleterSetting)) #msgBox.exec() for m in re.finditer(r'\S+', selline): num, part = m.start(), m.group() if (part == "." and num < len(selline) - 1 ) or (part == ";" and num < len(selline) - 1) or ( part == "{" and num < len(selline) - 1 and num != 1) or (part == "}" and num < len(selline) - 1 and num != 1): tc.setPosition(tc.selectionEnd() - 1) tc.insertText(os.linesep) cr = self.cursorRect() if len(seltext) > 0: self.completer.setCompletionPrefix(seltext) popup = self.completer.popup() popup.setCurrentIndex(self.completer.completionModel().index(0, 0)) cr.setWidth( self.completer.popup().sizeHintForColumn(0) + self.completer.popup().verticalScrollBar().sizeHint().width()) self.completer.complete(cr) else: self.completer.popup().hide() event.accept()