- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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/
我正在尝试根据消息为文本着色,我尝试了很多东西,但它们更改了所有文本颜色,而不仅仅是我需要的消息 ,正是那个错误。 if(Something) text = tr(""); if(Someth
我正在开发一个小型 SQL IDE 应用程序,它是一个用于为 Oracle 和 DB2 编写 SQL 过程的简洁工具。我使用 Qt 4 作为 GUI 基础。 还是想为My SQL IDE添加即时语法检
我有一个 GUI 应用程序,其主要部分是 QPlainTextEdit 。它用于显示应用程序的日志,因此关联的文本会逐行无限增长。 由于应用程序打算运行很长时间,因此我需要限制为此日志分配的内存。因此
我想强制重绘 QPlainTextEdit 小部件,因为我的突出显示规则发生了变化。但是,根据新规则,不会重绘所有线条和 block 。 这是真的,因为如果我修改一行,就会应用正确的突出显示,我很高兴
我正在使用 Qt 编写一个数据库类型程序,其中大多数输入都是单行,而不是任意长度的文档。 我是否正确理解 QPlainTextEdit 是最适合此类输入的小部件? 如果是这样,如何为这种输入设置参数?
我有一个 list temp = [1, 2, 3, 4, 5, 6, 7, 8] 我知道以字符串形式打印到控制台,我只会这样做 for i in range(0, len(temp)): t
tl;博士: QPlainTextEdit::appendPlainText(QString) 将换行符附加到我的文本小部件。 QPlainTextEdit::insertPlainText(QStr
我有一个 QPlainTextEdit 小部件,它填充了我窗口的一部分。用户可以调整窗口大小,因此 QPlainTextEdit 小部件占用的区域可能会有所不同。 我想知道在运行时如何确定在水平滚动条
我在 Qt 中使用 QPlainTextEdit 作为字段输入。有没有办法限制或忽略特定字符? 例如,我想忽略回车键(\n 或 \r\n 取决于平台)。 最佳答案 在每个 textChanged()
是否可以用QPlainTextEdit显示不同字体的文本?我已经试过了,但似乎所有小部件的字体都会改变一会儿,然后恢复正常: QFont font; font.setB
是否可以在 qplaintextedit 中编辑每行之间的间距/边距? 我试过使用普通的 html/css 标签(行高)编辑样式表,但似乎没有什么不同。 最佳答案 几天前,我的一个同事试图用 Qt 4
我在 QPlainTextEdit 上使用以下样式表 QPlainTextEdit:focus { color:red; } 但是文本颜色在聚焦时不会改变。 但是如果我使用这个: QPlain
假设我在变量 ln 中有一个行号。 int ln=25; 当我将 ln 传递给 QPlainTextEdit 时,滚动条将滚动到 QPlainTextEdit 中的第 25 行。 如何实现这个功能?有
我已经用 QT 开发了大约一个星期,我很高兴地说我很快就学会了。我是一名中级 C++ 程序员,但事实证明,学习 QT 的某些部分具有挑战性。当用户按下 Enter 键时,我需要处理来自 QPlainT
我在 Windows 上使用 C++ 和 Qt 创建一个简单的应用程序,该应用程序使用 QPlainTextEdit 将一些数据输出到屏幕。 问题是 QPlainTextEdit 的边框和文本之间有一
我有一个简单的QPlainTextEdit。在MainWindow构造函数中: for(int i = 0; i plainTextEdit->appendPlainText("testing");
我使用 QPlainTextEdit 制作了一个小编辑器,我希望能够突出显示整行文本以显示哪一行有错误。 我可以格式化文本,但我不知道如何将光标位置设置为指定行上文本的开始和结束位置。 此片段显示了我
假设我在 GUI 界面中进行文本编辑,并且按下 a 这样的键,那么我的文本编辑中不应出现“a”。 我可以将自己的函数添加到按键事件中,但我无法阻止它执行默认机制。 请帮我解决这个问题。 最佳答案 您可
我有一个 QPlainTextEdit,现在我想在其中突出显示一些单词,当我用鼠标悬停在它上面时,它会显示一个工具提示,其中包含关于这个突出显示的单词的描述或类似的东西,在 QT IDE 中类似这样
我想从纯文本中获取文本颜色。我可以使用 charFormat() 获取 fontWeight 和其他格式,但是当我调试前景色时,它被设置为无颜色!!? 请帮帮我.... 示例代码: QTextCurs
我是一名优秀的程序员,十分优秀!