我正在製作一種使用Python 2.7和PyQt5的命令行模擬器,它的工作方式是每輸入一個字符,它都會監聽密鑰。當你按下它時,它會呼叫self.parse()
這做什麼。Mystery newline被添加到QPlainTextEdit的末尾
當我加載窗口它工作正常,光標放在提示符後(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))
誰能幫助?
你嘗試的'insertPlainText()''而不是appendPlainText()'? – mhawke
@mhawke 「我嘗試過使用'insertPlainText'以及'appendPlainText'。」 閱讀問題:P – TheInitializer