Ich mache eine Art Kommandozeilen-Simulator mit Python 2.7 und PyQt5, und die Art, wie es funktioniert, ist jedes Zeichen, das Sie für den Schlüssel abhört. Wenn Sie es drücken, ruft es self.parse()
an, was Zeug macht.Mystery newline wird am Ende von QPlainTextEdit hinzugefügt
Wenn ich das Fenster hochlade, funktioniert es gut, und der Cursor wird nach der Eingabeaufforderung platziert(). Wenn ich einen Befehl eintippe und die Eingabetaste drücke, wird der Stoff gedruckt und eine neue Eingabeaufforderung wird gedruckt. Dann wird ein Zeilenumbruch gedruckt und der Cursor wird nach diesem Zeilenumbruch platziert.
Ich will das nicht. Wie kann ich es reparieren?
Ich habe Tonnen verschiedener Dinge probiert. Ich habe versucht plainTextEdit.textCursor().deletePreviousChar()
. Ich habe versucht, sowie appendPlainText
zu verwenden. Das gleiche passiert in jedem Fall. Es ist wirklich frustrierend.
Der noch frustrierendere Teil ist, ich habe keine Ahnung, wo in meinem Code die Zeilenschaltung hinzugefügt wird. Es ist wahrscheinlich nicht in parse
oder sonst deletePreviousChar
würde funktionieren. Und ich kann nicht glauben, wo sonst wäre es ...
Hier ist meine Klasse:
class CmdLine(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.ui = uic.loadUi('cmd.ui', self)
self.ui.show()
self.plainTextEdit.appendPlainText("C:\\> ")
self.plainTextEdit.installEventFilter(self)
self.editable = True
self.keys = []
self.lolnope = []
def eventFilter(self, widget, event):
if event.type() == QtCore.QEvent.KeyPress:
print event.text()
if self.editable:
if event.key() == QtCore.Qt.Key_Return:
self.parse()
else:
self.keys += event.text()
return QtWidgets.QMainWindow.eventFilter(self, widget, event)
else:
self.lolnope += event.text()
return True
else:
return QtWidgets.QMainWindow.eventFilter(self, widget, event)
def parse(self):
self.editable = False
self.plainTextEdit.moveCursor(QtGui.QTextCursor.End)
s = ''.join(self.keys)
# parse input and do things
self.keys = []
self.editable = True
self.plainTextEdit.moveCursor(QtGui.QTextCursor.End)
self.plainTextEdit.appendPlainText("C:\\> ")
self.plainTextEdit.textCursor().deletePreviousChar();
def __del__(self):
with open('lolnope.txt', 'w') as f:
f.write(''.join(self.lolnope))
Könnte mir jemand helfen?
Haben Sie versucht, 'insertPlainText()' statt 'appendPlainText()'? – mhawke
@mhawke "Ich habe versucht,' insertPlainText' sowie 'appendPlainText' zu verwenden." Lesen Sie die Frage: P – TheInitializer