您必须在您的`MainWindow 的__init__() 构建器内将filterObj 安装到您的QTextEdit 小部件(文档:QObject::installEventFilter())。
现在,您的代码可以正常工作了,除了一件事:当您在第二个TextEdit 中写更多字时,程序将无法识别错误。
对您的代码进行一些“改进”(只是为了测试,如果您能做得更好,那就完美了)您的__init__() 将如下所示:
def __init__(self):
...# some code to build your app
self.textEdit_2.installEventFilter(self) ## <<---HERE IS THE CRUCIAL PART
self.good = True
,您的eventFilter() 将如下所示:
def eventFilter(self, obj, event):
if obj is self.textEdit_2 and event.type() == QtCore.QEvent.KeyPress:
if event.key() == QtCore.Qt.Key_Space:
self.check()
elif event.key() == QtCore.Qt.Key_Backspace:
self.textEdit_2.clear()
self.good = True
return True
else:
if not self.good:
var2 = self.textEdit_2.toPlainText().split()
sw = var2.pop()
self.textEdit_2.clear()
self.textEdit_2.append(' '.join(var2)+' '+f"<span style='background-color: yellow;'>{sw}</p>")
self.good = False
return super(MainWindow, self).eventFilter(obj, event)
最后,您的check() 将如下所示:
def check(self):
var = self.textEdit.toPlainText().split()
var2 = self.textEdit_2.toPlainText().split()
j = len(var)-1
i = len(var2)-1
if i-j <= 0:
if var[i] != var2[i]:
sw = var2.pop()
self.textEdit_2.clear()
self.textEdit_2.append(' '.join(var2)+' '+f"<span style='background-color: yellow;'>{sw}</p>")
self.good = False
elif i-j == 1:
sw = var2.pop()
self.textEdit_2.clear()
self.textEdit_2.append(' '.join(var2)+' '+f"<span style='background-color: yellow;'>{sw}</p>")
self.good = False
self.good 只是一个布尔变量,我让你的应用知道当前文本是否有错误。这是我运行一个简单的应用程序以测试它是否有效时的外观:
编辑
查找第二个QTextEdit中的所有错误
现在,您评论说您需要找到textEdit_2 中的所有错误。所以我做了这些:
- 删除我之前做的
self.good bool 变量。
- 稍微修改
eventFilter()函数
- 重写您的
check() 函数。
代码在这里:
def __init__(self):
...# some code to build your app
self.textEdit_2.installEventFilter(self)
def eventFilter(self, obj, event):
if obj is self.textEdit_2 and event.type() == QtCore.QEvent.KeyPress:
if event.key() == QtCore.Qt.Key_Space:
self.check()
elif event.key() == QtCore.Qt.Key_Backspace:
self.textEdit_2.clear()
return True
return super(MainWindow, self).eventFilter(obj, event)
def check(self):
var_1 = self.textEdit.toPlainText().split()
var_2 = self.textEdit_2.toPlainText().split()
len_1 = len(var_1)
len_2 = len(var_2)
self.textEdit_2.clear()
text = []
for it in range(len_2):
if it < len_1:
if var_1[it] == var_2[it]:
text += [var_2[it]]
else:
text += ["<span style='background-color: yellow;'>"+var_2[it]+"</span>"]
else:
text += ["<span style='background-color: yellow;'>"+var_2[it]+"</span>"]
text = ' '.join(text)
self.textEdit_2.append(text)
它看起来像这样: