gpt4 book ai didi

python - 神秘的换行符被添加到 QPlainTextEdit 的末尾

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:49 26 4
gpt4 key购买 nike

我正在使用 Python 2.7 和 PyQt5 制作一种命令行模拟器,它的工作方式是您键入的每个字符它都会监听按键。当你按下它时,它会调用 self.parse() 来执行一些操作。

当我加载窗口时,它工作正常,并且光标放置在提示符之后(C:\>)。当我输入命令并按 Enter 时,会打印内容,并打印新的提示。然后打印一个换行符,并将光标放置在该换行符之后。

我不想要这个。我该如何修复它?

我尝试过很多不同的事情。我尝试过plainTextEdit.textCursor().deletePreviousChar()。我尝试过使用 insertPlainText 以及 appendPlainText。每种情况都会发生同样的情况。真是令人沮丧。

更令人沮丧的是我不知道在代码中的何处添加了换行符。它可能不在 parse 中,否则 deletePreviousChar 会起作用。我想不出它还会在哪里......

这是我的类(class):

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))

有人可以帮忙吗?

最佳答案

您需要绕过 return/enter 的正常处理,然后使用 insertPlainText 来控制换行符的输入方式:

class CmdLine(QtWidgets.QMainWindow):
def __init__(self):
super(CmdLine, self).__init__()
...
self.plainTextEdit.insertPlainText("C:\\> ")

def eventFilter(self, widget, event):
if event.type() == QtCore.QEvent.KeyPress:
print event.text()
if self.editable:
if (event.key() == QtCore.Qt.Key_Return or
event.key() == QtCore.Qt.Key_Enter):
self.parse()
# bypass default handling
return True
else:
self.keys += event.text()
else:
self.lolnope += event.text()
return True
return super(CmdLine, self).eventFilter(widget, event)

def parse(self):
...
# terminate current line and start a new one
self.plainTextEdit.insertPlainText("\nC:\\> ")

关于python - 神秘的换行符被添加到 QPlainTextEdit 的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37913651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com