有了 QTextEdit,我想插入一个带有背景颜色的字符串。但这样做时,末尾的空格不会改变颜色。虽然我能够创建一个 mcve,但事实证明重写代码可以解决问题。
接下来是 mcve:
from PySide2 import QtWidgets, QtGui, QtCore
class Terminal(QtWidgets.QTextEdit):
def __init__(self, handler, width=80, height=30):
super().__init__()
self.setStyleSheet("Terminal {background-color: black;"
"color: white;"
"font: 10pt Consolas}")
self.setTextInteractionFlags(QtCore.Qt.NoTextInteraction)
self.setPlainText("\n".join([" " * width] * height))
self._width = width
self._cursor = self.textCursor()
self._handler = handler(self)
next(self._handler)
def say(self, row, col, text, **kwargs):
format = QtGui.QTextCharFormat()
for key, value in kwargs.items():
getattr(format, f"set{key}")(value)
start = row * (self._width + 1) + col
self._cursor.setPosition(start)
self._cursor.setPosition(start + len(text), QtGui.QTextCursor.KeepAnchor)
self._cursor.insertText(text, format)
app = QtWidgets.QApplication([])
@Terminal
def widget(win):
win.say(0, 0, "hello ", Background=QtGui.QColor("red"))
yield
widget.show()
app.exec_()
我可能做错了什么?
编辑:当窗口最大化时,空间是彩色的。我会看看这是什么原因。
我发现问题了!事实证明,QTextEdit 自动添加了换行符,以便文本进入小部件。
因此,我只能通过:
self.setLineWrapMode(QtWidgets.QTextEdit.NoWrap)