【发布时间】:2021-06-16 10:45:52
【问题描述】:
QtextEdit 内置的 textChanged 信号不包括当前文本(与 QlineEdit 一样)。 我想继承 QTextEdit 以便它发出一个包含当前文本的类似信号。
我找到了一个可行的解决方案,但我觉得它有点 hackish:
class MyTextEdit(QTextEdit):
plainTextChanged = pyqtSignal(str)
def __init__(self):
super().__init__()
self.textChanged.connect(lambda: self.plainTextChanged.emit(self.toPlainText()))
还有其他(更惯用的?)方法可以做到这一点? 你能覆盖生成 textChanged 信号的代码吗? 在我的想象中,它看起来像这样:
class MyTextEdit(QTextEdit):
plainTextChanged = pyqtSignal(str)
def __init__(self):
super().__init__()
def some_override(self):
...
self.plainTextChanged.emit(self.toPlainText())
【问题讨论】:
-
离题但是...
textChanged信号没有将文本作为字符串传递可能是有充分理由的。如果文本很大(例如数万行)并且经常更新怎么办?你真的想要生成和传递所有数据的开销(甚至允许写时复制等)吗? -
@G.M.宾果游戏:这正是默认情况下不提供信号的原因。
-
@G.M.我明白为什么会这样,但在我的情况下,文本最多只有几行。
标签: python pyqt pyqt5 qtextedit