我正在使用Python 2.7和PyQt5制作一种命令行模拟器,它的工作方式是你键入的每个字符都会监听密钥。按下它时会调用self.parse()来完成任务。
当我加载窗口时它工作正常,光标放在提示符后面(C:\>)。当我输入一个命令,然后按回车键时,会打印这些内容,并打印一个新提示。然后打印换行符,并将光标放在该换行符之后。
我不想要这个。我该如何解决?
我尝试了很多不同的东西。我试过了plainTextEdit.textCursor().deletePreviousChar()。我尝试过使用insertPlainText以及appendPlainText。在每种情况下都会发生同样的事情。这真的令人沮丧。
更令人沮丧的部分是我不知道在我的代码中添加换行符的位置。它可能不在parse中,否则deletePreviousChar会起作用。而且我想不出它会在哪里......
这是我的班级:
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))
有人可以帮忙吗?